队列和栈的区别
-
队列是先进先出
-
栈是先进后出
思路
使用两个队列可以实现栈,一个 a 队列, 一个 b 队列,
- 第一步, 入栈值放入 a 队列
- 第二步, 入栈值放入 b 队列, 再把 a 队列的值弹出,按顺序放到
b队列, 直到 a 队列清空 - 第二步, 入栈值放入 a 队列, 再把 b 队列的值弹出,按顺序放到
a队列, 直到 b 队列清空 - ... 如此循环
步骤图
- 第1步 push | A | B | | --- | --- | | | | | | | | | | | h | |
- 第2步 push | A | B | | --- | --- | | | | | | | | | h | | | e |
- 第3步 push | A | B | | --- | --- | | | | | h | | | e | | | l | |
- 第4步 push | A | B | | --- | --- | | | h | | | e | | | l | | | l |
- 第5步 push | A | B | | --- | --- | | h | | | e | | | l | | | l | | | o | |
- 第6步 pop | A | B | | --- | --- | | | | | h | | | e | | | l | | | l | |
- 第7步 pop | A | B | | --- | --- | | | | | h | | | e | | | l | |
- 第8步 pop | A | B | | --- | --- | | | | | | | | h | | | e | |
- 第9步 pop | A | B | | --- | --- | | | | | | | | | | | h | |
- 第10步 pop | A | B | | --- | --- | | | | | | | | | | | | |
代码
const Queue = require('./queue')
class Stack {
constructor() {
this.A = new Queue()
this.B = new Queue()
}
push(val) {
if(this.A.size()) {
this.B.enqueue(val)
while(this.A.size()) {
this.B.enqueue(this.A.dequeue())
}
}else{
this.A.enqueue(val)
while(this.B.size()) {
this.A.enqueue(this.B.dequeue())
}
}
}
pop() {
if(this.A.size()) {
console.log(this.A.peek());
return this.A.dequeue()
}else{
console.log(this.B.peek());
return this.B.dequeue()
}
}
}
const stack = new Stack()
stack.push('h');
stack.push('e');
stack.push('l');
stack.push('l');
stack.push('o');
stack.pop(); //o
stack.pop(); //l
stack.pop(); //l
stack.pop(); //e
stack.pop(); //h
总结
定义两个栈 每次入栈的时候,先把数据放入空队列中,再把另一个有数据的队列全部放入刚才的空队列, 出栈的时候弹出有数据的那个栈