队列和栈的区别
思路
使用两个队列能够实现栈,一个 a
队列, 一个 b
队列,this
- 第一步, 入栈值放入 a 队列
- 第二步, 入栈值放入 b 队列, 再把 a 队列的值弹出,按顺序放到
b
队列, 直到 a 队列清空
- 第二步, 入栈值放入 a 队列, 再把 b 队列的值弹出,按顺序放到
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();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
复制代码
总结
定义两个栈 每次入栈的时候,先把数据放入空队列中,再把另外一个有数据的队列所有放入刚才的空队列, 出栈的时候弹出有数据的那个栈spa