我正在用JavaScript实现一个堆栈.
考虑:
Stack{0,1,2,3} Top:0
现在用户弹出值2:
Stack{0,1,3} Top:0
这是堆栈可接受的行为吗?我正在滚动自己的堆栈,但有没有内置的代码可以为我做这个?
function Stack() //Creating Stack Object { // Create an empty array of cards. this.cards = new Array(); //Cards array inside stack object this.push = pushdata; //Call pushdata function on push operation this.pop = popdata; //Call popdata function on pop operation this.printStack = showStackData; //Call showStackData function on printstack operation } function pushdata(data) { this.cards.push(data); } function popdata(data) { return this.cards.pop(); } function showStackData() { return this.cards; } var a = new Stack(); //Create stack Object a.push(12); //Push Data onto Stack a.push(32); a.push(42); var z = a.pop(); document.write("Data Popped: " + z); document.write("Stack Output: " + a.printStack());
如果堆栈不是此应用程序的正确数据结构类型,那么正确的是什么?
在堆栈中执行上述操作是合法的吗?
这不是传统的堆栈操作.允许您这样做的数据结构实际上不能称为堆栈; 它更像是一个简单的旧列表.
如果stack不允许删除top和start之间的数据.在javascript中用于上述逻辑的alter datastructure是什么?
简单数组有什么问题吗?它为您提供了您想要的随机访问项目:
var a= [0, 1, 2, 3]; a.splice(1, 1); // a==[0, 2, 3]
加上用于访问前端和尾部堆栈(以及队列)的堆栈式便捷方法:push/pop/shift/unshift.
当Array()已经覆盖IMO时,制作自己的Stack()包装类没有多大意义.虽然计算机科学家可能对诸如堆栈链接列表的算法复杂性之类的事情感兴趣,但实际上,您无法从更高级别的代码改进现有JavaScript解释器中内置的优化阵列实现.