如何用两个队列实现栈

队列和栈的区别

  • 队列是先进先出markdown

  • 栈是先进后出ui

思路

使用两个队列能够实现栈,一个 a 队列, 一个 b 队列,this

  • 第一步, 入栈值放入 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
复制代码

总结

定义两个栈 每次入栈的时候,先把数据放入空队列中,再把另外一个有数据的队列所有放入刚才的空队列, 出栈的时候弹出有数据的那个栈spa

相关文章
相关标签/搜索