编写一个镜像堆栈行为的函数,但是有一个队列......?

时间:2016-05-23 01:58:51

标签: javascript data-structures stack queue

我在模拟面试中遇到了这个问题,我不确定我是否理解它的要求。我应该编写一个具有队列但是堆栈属性的函数?

这是我的堆栈基本实现:

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;

  }

}

我如何在我的例子中实现这个?

感谢。

1 个答案:

答案 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)您需要两个队列数据结构来实现堆栈。