JavaScript中的堆栈操作

JavaScript中的堆栈操作,javascript,data-structures,stack,Javascript,Data Structures,Stack,我正在用JavaScript实现一个堆栈 考虑: Stack{0,1,2,3} Top:0 现在,用户弹出值2: Stack{0,1,3} Top:0 对于堆栈来说,这是可接受的行为吗?我正在滚动我自己的堆栈,但是否有任何内置代码可以为我这样做 我的代码: 如果堆栈不是此应用程序的正确数据结构类型,那么正确的数据结构是什么?使用Pop不可能做到这一点(如果不同时弹出其他内容)。您应该考虑为用户提供另一种方法来查找数字2的位置,并为用户提供另一种提取方法,例如使用阵列拼接。但到那时,这已经不再

我正在用JavaScript实现一个堆栈

考虑:

Stack{0,1,2,3} Top:0
现在,用户弹出值2:

Stack{0,1,3} Top:0
对于堆栈来说,这是可接受的行为吗?我正在滚动我自己的堆栈,但是否有任何内置代码可以为我这样做

我的代码:
如果堆栈不是此应用程序的正确数据结构类型,那么正确的数据结构是什么?

使用Pop不可能做到这一点(如果不同时弹出其他内容)。您应该考虑为用户提供另一种方法来查找数字2的位置,并为用户提供另一种提取方法,例如使用阵列拼接。但到那时,这已经不再是一堆了

在堆栈中执行上述操作合法吗

这不是传统的堆栈操作。允许您这样做的数据结构实际上不能称为堆栈;这更像是一份普通的旧名单

如果堆栈不允许删除top和start之间的数据,那么javascript中用于上述逻辑的alterDataStructure是什么

简单的电话有什么问题吗?它为您提供了所需的随机访问项:

var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]
加上用于访问前加载堆栈和后加载堆栈(以及队列)的堆栈样式便利方法:push/pop/shift/unshift


如果Array()已经涵盖了Stack()包装类,那么创建自己的Stack()包装类就没有什么意义了。虽然计算机科学家可能对Stack的链表的算法复杂性感兴趣,实际上,您无法从更高级别的代码中改进内置于现代JavaScript解释器中的优化数组实现。

如果您确实必须使用堆栈,您可以多次弹出,通过按下将弹出的数据临时存储在另一个堆栈中,然后在完成后,执行相反的操作,将堆栈末端放回原位

GUI应用程序中的撤销/重做操作通常会执行类似的操作——它们有一个撤销操作堆栈和一个相反的重做操作堆栈。撤消将操作从堆栈A移动到B,重做将操作从堆栈B移动到A。新操作推到撤消堆栈上,并完全清除重做堆栈

使用此选项的另一个位置是在浏览器的“后退/前进”列表中

var a= [0, 1, 2, 3];
a.splice(1, 1);
// a==[0, 2, 3]