实在JS很“地痞的”,JS的数组完整既可所以行列也可所以栈。
由于数组的push,pop就是栈的一组要领嘛。
数据的push,shift就是行列的一组要领嘛。
然则数据结构学问的须要,数据结构中对行列、栈的定义很明白:
栈,先进后出
行列,先进先出
如今要用两个栈完成一个行列,那末起首定义一个栈组织函数吧。
定义一个栈Stack组织函数
new两个Stack,stack1,stack2
stack1完成行列的进就好了
stack2完成行列的出就好了
重点来了,进的时刻去的是stack1,怎样从stack2出数据呢当栈2为空,栈1不为空时,把栈1的数据顺次pop出去到栈2中,如许再栈2pop时就是行列应当pop的数据了
上代码:
function Queue(){
var items = [];
function Stack() {
var item = [];
this.push = function (elem) {
item.push(elem);
return item;
};
this.pop = function () {
return item.pop();
};
this.isEmpty = function () {
return item.length === 0;
};
this.get = function () {
return item;
};
}
var stack1 = new Stack();
var stack2 = new Stack();
this.push = function (elem) {
stack1.push(elem);
return items.push(elem);
}
this.pop = function () {
if(stack1.isEmpty() && stack2.isEmpty()){
throw new Error("空行列");
}
if(stack2.isEmpty() && !stack1.isEmpty()){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}
};
this.get = function () {
if(!stack2.isEmpty()){
return stack2.get().reverse();
}else{
return items;
}
}
}
var queue = new Queue();
queue.push(0);
queue.push(1);
queue.push(2);
queue.get();
queue.pop();
queue.get();