Java 使用棧實現簡單隊列功能

Java 使用棧實現簡單隊列功能

前兩天面試奇安信,有問到如果通過棧實現隊列,當時沒有回答清楚,現在記錄一下。

通過A,B兩個棧,一個作爲入棧,一個作爲出棧。當有數據入列時將數據放入A棧,如果需要出列,則調用B棧進行出棧。

具體實現方案

  • 當有數據入隊時,使用A棧進行入棧,並判斷B棧是否爲空,如果爲空則將A棧的數據轉移至B棧
  • 當出棧時,判斷B棧是否存在數據,如果存在直接彈出,否則轉移數據

注意:一定是要在B棧爲空時進行轉移,否則會導致順序錯亂

public class StackQuene {
    //用於入棧
    private Stack<Integer> statckPush;
    // 用於出棧
    private Stack<Integer> stackPop;

    public StackQuene(){
        stackPop = new Stack<>();
        statckPush = new Stack<>();
    }

    public int poll(){
        if(stackPop.empty()){
            // 當出棧中沒有數據,則進行轉移
            transferStack();
        }
        if(stackPop.empty()){
            // 數據轉移後依然沒有數據
            return -1;
        }
        return stackPop.pop();
    }

    public void add(int num){
        statckPush.push(num);
        // 如果出棧爲空,則進行轉移
        if(stackPop.empty()){
            transferStack();
        }
    }

    /**
     * 將入棧數據轉入到出棧
     */
    public void transferStack(){
        while (!statckPush.empty()){
            stackPop.push(statckPush.pop());
        }
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章