題目:
編寫一個類,用兩個棧實現隊列,支持隊列的基本操作(add,poll,peek)
思路: * 棧的特點是先進後出,隊列的特點是先進先出,因此我們只需要 * 定義兩個棧,其中一個作爲壓入棧stackPush,另一個作爲彈出棧stackPop * 將數據壓入stackPush中,然後全部彈出放入stackPop中, * 比如,將12345放入stackPush中,順序爲54321,彈出後放入stackPop中,這時候stackPop中順序爲12345,再從stackPop中彈出數據 * 便完成了用棧實現隊列,因爲我們想要的就是12345順序進來,12345順序出去 * 但是要注意兩點, * 1、在stackPush棧未空前,stackPop不能彈棧 * 2、stackPop在初始時候必須爲空
package day01; import java.util.Stack; public class test2 { private Stack<Integer> stackPush; private Stack<Integer> stackPop; public test2(){ this.stackPush = new Stack<>(); this.stackPop = new Stack<>(); } //push棧向pop棧倒入數據 public void pushToPop(){ if (stackPop.isEmpty()){ while (!stackPush.isEmpty()){ stackPop.push(stackPush.pop()); } } } public void add(int newNum){ stackPush.push(newNum); pushToPop(); } public int pop(){ if (stackPush.empty() && stackPop.empty()){ throw new RuntimeException("出大錯啦"); } pushToPop(); return stackPop.pop(); } public int peek(){ if (stackPop.empty() && stackPush.empty()){ throw new RuntimeException("出錯啦"); } pushToPop(); return stackPop.peek(); } }