用两个栈实现队列
题目描述
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
代码如下:
function Stack(){
var item = [];
this.push = function(node){
item.push(node);
};
this.pop = function(){
return item.pop();
};
this.isEmpty = function(){
return item.length === 0;
};
}
var stack1 = new Stack();
var stack2 = new Stack();
function push(node)
{
stack1.push(node);
// write code here
}
function pop()
{
if(stack1.isEmpty() && stack2.isEmpty()){
throw new Error("Queue is empty");
}
if(stack2.isEmpty()){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
// write code here
}
module.exports = {
push : push,
pop : pop
};
解题思路
栈是一种后进先出的数据结构,而队列是一种先进先出的数据结构,那么本题中,
1、实现入队:将元素直接压入栈1。
2、实现出队:先判断两个栈是否都为空,如果不是,在判断栈2,如果为空,栈1不为空,先将栈1的元素全部出栈,按顺序压入栈2,然后再从栈2中出栈,就取得了原来在栈1栈底的元素了。