由兩個棧組成的隊列

題目:

       編寫一個類,用兩個棧實現隊列,支持隊列的基本操作(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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章