题目:用两个栈组成一个队列,支持队列的基本操作
思路:因为栈是先进后出,队列是先进先出,所以我们可以一个栈用来做入队,一个栈用来做出队。这里记作入栈stackPush,出栈stackPop。
因为数据压入栈的时候,顺序是先进后出的,所以把stackPush的数据放到stackPop,顺序符合队列的思想了,比如说入栈,1,2,3,4,5,现在
栈内元素是5,4,3,2,1,然后把这些元素压入到stackPop里,就变成,1,2,3,4,5,这样在执行出队的时候,就是先了先进先出的思想。但是要注意的是,
在执行放入stackPop的操作时,要保证,stackPop中元素是空的,否则会出问题!!!
废话不多说,直接上代码:
import java.util.Stack; public class twoStackQueue { public Stack<Integer> stackPush; public Stack<Integer> stackPop; private void PushToPop(){ if(stackPop.isEmpty()){ while (!stackPush.empty()){ stackPop.push(stackPush.pop()); } } } public twoStackQueue(){ this.stackPush = new Stack<>(); this.stackPop = new Stack<>(); } public void add(int pushInt){ stackPush.push(pushInt); PushToPop(); } public int poll(){ if(stackPop.empty() && stackPush.empty()){ throw new RuntimeException("Queue is empty!!!"); } PushToPop(); return stackPop.pop(); } public int peek(){ if(stackPop.empty() && stackPush.empty()){ throw new RuntimeException("Queue is empty!!!"); } PushToPop(); return stackPop.peek(); } @Override public String toString() { return "twoStackQueue{" + "stackPush=" + stackPush + ", stackPop=" + stackPop + '}'; } }
运行结果:
输入元素,1,2,3,4,5
执行出队操作:
标签:队列,stackPop,stackPush,--,empty,Stack,public,组成 From: https://www.cnblogs.com/99kol/p/16939850.html