2.用两个栈实现一个队列

Posted 曲项向天歌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.用两个栈实现一个队列相关的知识,希望对你有一定的参考价值。

分析:栈是先进后出,队列是先进先出,所以我们要借助一个栈来反转元素的顺序。比如两个栈,pushStack和popStack,当队列添加元素时都用pushStack存放,当队列移除元素时用popStack弹出的元素,popStack栈的作用就是反转pushStack栈中元素的顺序。

步骤:当队列用add方法添加元素时都存入pushStack中,当队列用poll(poll方法移除元素,当队列为空则返回null)方法移除元素时,先判断popStack是否为空,如果popStack为空则接着判断pushStack是否为空,如果pushStack也为空则表明此时两个栈都没有元素,队列返回为空,如果pushStack中有元素则将pushStack中的所有元素依次弹出并添加到popStack栈中,最后将popStack的栈顶元素弹出即实现了队列的移除元素的方法。

附上Java代码实现:

public class DoubleStackQueue{
    Stack<Integer> pushStack=new Stack<>();//存放队列添加的元素
    Stack<Integer> popStack=new Stack<>();//当元素出队列时,先将pushStack里的元素添加到popStack中以反转元素在栈中的顺序
    public void add(Integer num){
        pushStack.push(num);
    }
    public Integer remove(){
        if(!popStack.empty()){
            return popStack.pop();
        }else{
            if(pushStack.isEmpty()){
                return null;
            }else{
                while (!pushStack.isEmpty()){
                    popStack.push(pushStack.pop());
                }
            }
        }
        return popStack.pop();
    }
}

 

以上是关于2.用两个栈实现一个队列的主要内容,如果未能解决你的问题,请参考以下文章

用两个栈实现一个队列(C++)

《剑指Offer——面试题9:用两个栈实现队列》代码

新手向C语言实现特殊数据结构——队列(含用两个队列实现栈)

新手向C语言实现特殊数据结构——队列(含用两个队列实现栈)

N5-用两个栈来实现一个队列

用两个栈实现队列的POP和PUSH操作