如何在 O(1) 中为 Javascript/Typescript 中的堆栈编写弹出函数

How to write a pop function for a stack in Javascript/Typescript in O(1)

我正在尝试在 TypeScript 中构建自己的堆栈,但我在实现 pop() 函数时遇到了问题,该函数可以 运行 在 O(1) 时间复杂度内模仿 Javascript 的原生弹出()函数。我能够删除最顶层的项目,但 Javascript 将堆栈中的索引保留为 undefined。为了解决这个问题,我过滤堆栈以删除未定义,导致 O(n) 时间复杂度。任何其他在 O(1) 中实现这一点的想法都值得赞赏。当前代码:

public pop(): T {
        if (this.isEmpty()) {
            throw new Error('Empty Stack');
        }
        const popped = this.storage[this.size() - 1];
        this.stackSize--;
        delete (this.storage[this.size() - 1]);
        this.storage = this.storage.filter(x => x !== undefined);
        return popped;
    }

您不需要实际从数组中删除项目

如果你只是调用

this.stackSize--;

你含蓄地说你删除了它

问题是您需要更改所有其他函数以使用索引而不是本机函数

所以顶() 应该像

top(){

return this.stack[this.stackSize-1]
}


等等...

这将实现 O(1)

在JavaScript中,你可以这样缩短数组:

this.storage.length = this.storage.length-1