隊列和棧的區別
思路
使用兩個隊列能夠實現棧,一個 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