有没有办法只使用堆栈来实现列表?

时间:2012-09-23 15:48:12

标签: algorithm

我想知道是否有办法只使用堆栈来实现列表。有吗?

2 个答案:

答案 0 :(得分:2)

您可以使用两个堆栈创建(低效)列表。当您需要插入或检索项目时,只需将项目从一个堆栈移动到另一个堆栈,直到获得正确的索引。

这是JavaScript中的一个示例:

function List() {
    this.stack1 = [];
    this.stack2 = [];

    Object.defineProperty(this, 'length', {
        get: function() { return this.stack1.length + this.stack2.length; }
    });
}

List.prototype.item = function(index) {
    if(index < this.stack1.length) {
        while(index < this.stack1.length - 1) {
            this.stack2.push(this.stack1.pop());
        }

        return this.stack1[this.stack1.length - 1];
    }

    while(index > this.stack1.length) {
        this.stack1.push(this.stack2.pop());
    }

    return this.stack2[this.stack2.length - 1];
};

List.prototype.insert = function(item, index) {
    this.item(index - 1);
    this.stack1.push(item);
};

答案 1 :(得分:0)

按列表,你的意思是队列吗?因为我看不到堆栈和列表之间的任何连接......

如果是这样,你可以使用两个堆栈:s1 san s2,想象它们是从下到下。 s1是列表的头部,s2是尾部。 这个清单的功能:

  1. insert(ele):只需使用s2.push_back(ele)
  2. pop():如果s1不为空,则s1.pop(); else从s2弹出每个元素并将它们推入s1,然后s1.pop()
  3. 尺寸():s1.size()+ s2.size()
  4. ...