用两个栈实现队列
//用两个栈来实现队列
//进1234,出1234
//push方法直接进instack即可
//pop方法要将4321全部放入outstack,然后outstack.pop()
//此时分为两种情况 1.若outstack非空,直接pop 2.若outstack为空,再将instack全部放入outstack
//时间复杂度O(n)(看循环) 空间复杂度O(n)(看数组,看递归)
var instack=[]
var outstack=[]
function Push(node){
return instack.push(node)
}
function Pop(){
if(outstack.length!==0){
return outstack.pop()
}else{
while(instack.length){
outstack.push(instack.pop())
}
return outstack.pop()
}
}
用两个队列实现栈(扩展)
// 两个队列实现栈(push shift)
//1234进入 ,4321出
//入栈:进入非空队列,若都为空,默认q1
//出栈:将非空队列的元素(除最后一个)全部放入空队列,只剩最后一个,出队即可
var q1=[]
var q2=[]
function inqueue(node){
if(!q1.length){
q2.push(node)
}else{
q1.push(node)
}
}
function outqueue(){
if(!q1.length){
while(q2.length-1){
q1.push(q2.shift())
}
return q2.shift()
}else if(!q2.length){
while(q1.length-1){
q2.push(q1.shift())
}
return q1.shift()
}
}