两个栈实现一个队列

思路

栈:后进先出

队列:先进先出

将数据进入到一个栈,然后再让另一个栈接受弹出的数据,再pop第二个栈即可得到”先进先出”的序列

需要注意点:

一个数据出队列之后,如果再加入新的数据就会影响第二个栈的弹出顺序

例如:1,2,3,4——>4,3,2,1 1出队列之后加入5,如果还是第二个栈的状态就会先输出5,这明显是有问题的

所以需要在第二个栈弹出数据后再恢复到第一个栈的状态

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
let stack1 = [1, 2, 3, 4, 5];
let stack2 = [];

function inqueue(val) {
stack1.push(val);
}

function outqueue() {
while (stack1.length) {
stack2.push(stack1.pop()); //全部进入第二个栈
}
let val = stack2.pop(); //弹出栈顶元素
while (stack2.length) {
stack1.push(stack2.pop()); //恢复原状
}
return val;
}
console.log(outqueue()); //1
inqueue(6);
console.log(outqueue()); //2

然而在实际应用中有shift这个函数可以直接使用


两个栈实现一个队列
https://blog-theta-ten.vercel.app/2021/08/17/两个栈实现一个队列/
作者
Chen
发布于
2021年8月17日
许可协议