我在模拟面试中遇到了这个问题,我不确定我是否理解它的要求。我应该编写一个具有队列但是堆栈属性的函数?
这是我的堆栈基本实现:
function Stack() {
this._size = 0;
this._storage = {};
}
Stack.prototype.push = function(data) {
var size = this._size++
this._storage[size] = data;
}
Stack.prototype.pop = function() {
var size = this._size,
deletedData;
if (size) {
deletedData = this._storage[size];
delete this._storage[size];
this._size--;
return deletedData;
}
};
这是我的队列实现:
function Queue() {
this._newestIndex = 1;
this._oldestIndex = 1;
this._storage = {};
}
Queue.prototype.size = function() {
console.log(this._newestIndex - this._oldestIndex);
}
Queue.prototype.enqueue = function(data) {
this._storage[this._newestIndex] = data;
this._newestIndex++;
}
Queue.prototype.dequeue = function() {
var oldestIndex = this._oldestIndex;
var newestIndex = this._newestIndex;
var datatoDelete;
if (newestIndex !== oldestIndex) {
datatoDelete = this._storage[oldestIndex]
delete this._storage[oldestIndex];
this._oldestIndex++;
return datatoDelete;
}
}
我如何在我的例子中实现这个?
感谢。
答案 0 :(得分:0)
我不确定我是否理解它的要求
好吧,你需要使用队列创建一个堆栈,也就是说,假设你已经获得了队列数据结构并使用队列数据结构中提供的函数,你需要创建一个堆栈。
因此,Stack代码的结构将如下所示:
function push(){
//code for push but using queue data-structures functions
}
function pop(){
//code for pop but using queue data-structures
}
提示: 1)通过使用队列来创建堆栈,您必须使“pop”或“push”操作变得昂贵。我的意思是昂贵,现在要么pop操作不在o(1)中,要么push操作不在O(1)中。
2)您需要两个队列数据结构来实现堆栈。