劍指offer之用兩個棧實現隊列

1.題目描述

用兩個棧來實現一個隊列,完成隊列的Push和Pop操作。 隊列中的元素爲int類型。

2.問題分析

這個問題可以參考兩個隊列實現一個棧,思想是一樣的。需要分析一下什麼時候Push和Pop,那個隊列Push,那個隊列Pop:

  1. 入隊:將元素進棧A
  2. 出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B,棧B出棧;如果不爲空,棧B直接出棧。

3.源代碼

class CQueue
{
public:
    void push(int node) {
        stack1.push(node);
    }

    int pop() {
    	//stack2是否爲空,如果爲空,則將stack1中所有元素pop,並push進stack2
        if(stack2.empty() )
        {
            while(!stack1.empty() )
            {
                int value = stack1.top();
                stack1.pop();
                stack2.push(value);
            }         
        }
        //如果棧2還是空的,那麼pop失敗,返回-1值,當然這裏返回-1值不是一個很合適的值
        int value = -1;
        if(stack2.size() > 0)
        {
            value = stack2.top();
            stack2.pop();
        }
        return value;
    }

private:
    //棧1用來push
    stack<int> stack1;
    //棧2用來pop
    stack<int> stack2;
};
發佈了84 篇原創文章 · 獲贊 55 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章