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.用两个栈实现一个队列的主要内容,如果未能解决你的问题,请参考以下文章