文章出處

上篇文章寫了用兩個棧實現一個隊列,這篇文章實現用兩個隊列實現一個棧,其實兩者的思想都是差不多的。

下邊繼續畫圖說明:

\

下邊給出實現代碼:

#includetemplateclass Stack{public:void Push(const T& x){//q1,q2都為空,push進q1if (_q1.empty()&&_q2.empty()){_q1.push(x);}else if (!_q1.empty())//q1不空就push進q1{_q1.push(x);}//q1空,q2不空(直接放入q1,這樣pop的話可能更方便一些),要是之后還需要push就不方便了else//q2不空,push進q2{_q2.push(x);}}T Pop(){if (_q1. empty() && _q2.empty()){exit(EXIT_FAILURE);}if (!_q1.empty()){while (_q1.size() != 1){T tmp = _q1.front();_q1.pop();_q2.push(tmp);}T  ret = _q1.front();_q1.pop();return ret;}if (!_q2.empty()){while (_q2.size() != 1){T tmp = _q2.front();_q2.pop();_q1.push(tmp);}T  ret = _q2.front();_q2.pop();return ret;}}private:queue _q1;queue _q2;};void test(){Stack s;s.Push(1);s.Push(4);s.Push(5);s.Push(6);s.Push(7);cout << s.Pop() << endl;cout << s.Pop() << endl;cout << s.Pop() << endl;cout << s.Pop() << endl;cout << s.Pop() << endl;}int main(){test();system("pause");return 0;}

通過上邊的代碼,我們可以看出,這段代碼的實現方法是圖片里的方法2,即就是,每次push進不空的隊列,pop時

將空隊列當做輔助隊來實現,這樣的方法較圖片中給出的方法1更有效一些。

上邊程序的輸出結果 7 6 5 4 1(兩個 數字之間回車隔開),這樣實現了先進后出。

對于圖片中的方法1,這里就不給出代碼了,有興趣可以自己實現。~~~

就愛閱讀www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161116/53999.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()