劍指offer 用兩個棧實現佇列

2021-08-21 10:25:50 字數 869 閱讀 9380

用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。

開始思路有個誤區,覺得壓入時所有元素必須在stack1裡面,彈出時所有元素必須在stack2裡面。其實彈出時只要stack2非空,直接從stack2彈出就好了,棧頂就是最先進入佇列的元素,為空,再把stack1所有元素乙個個彈出並壓入stack2。壓入的話直接push進stack1就行了。

#includeusing namespace std;

class solution

int pop()

else if(!stack1.empty())

temp = stack2.top();

stack2.pop();

}//else

// throw new exception("quene is empty");

return temp;

}private:

stackstack1;

stackstack2;

};

調錯總結:

(1)開始沒有看到pop()返回值是int,以為是void,沒有return pop出來的元素,報下面這個錯誤:

error: control reaches end of non-void function [-werror,-wreturn-type]

就是該有返回值的地方沒有取得返回值的意思。

(2)當stack1和stack2都為空的時候,pop操作可以丟擲乙個異常,但是加上書上相應**之後報錯:

error: no matching constructor for initialization of 'std::exception'

不知道怎麼解決。

劍指offer 用兩個棧實現佇列

華電北風吹 天津大學認知計算與應用重點實驗室 日期 2015 9 30 題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解析 我的思路是用乙個棧來儲存資料,入隊的話直接在這個棧上入棧,出隊的話借助輔助棧,對輔助棧入棧,然後取出頭元素,然後把輔助棧上的元素在...

用兩個棧實現佇列《劍指offer

題目描述 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 將元素入隊時壓入乙個棧中,隨後通過另乙個棧出隊 1 使用stack容器定義兩個棧 stack stack1 stack stack2 2 入隊 stack1.push node node為入隊元素 ...

劍指offer 用兩個棧實現佇列

記錄 劍指offer 上的演算法題。題目描述如下 佇列的宣告如下 template class cqueue cqueue t deletehead bool empty private stack stack1 stack stack2 實現的 如下 templatet stack1.push n...