數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例
更新時間:2017年06月22日 09:21:56 投稿:lqh
這篇文章主要介紹了C++語言數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例的相關(guān)資料,需要的朋友可以參考下
數(shù)據(jù)結(jié)構(gòu)用兩個棧實現(xiàn)一個隊列的實例
棧是先進后出,隊列是先進先出
每次元素都push在st1中,pop的時候如果st2為空,將st1的棧頂元素放在st2的棧底,這樣st1的所有元素都放在st2中,st1的棧底就是st2的棧頂,pop st2的棧頂,這樣就滿足了隊列的先進先出。
#include <iostream> using namespace std; #include <stack> #include <stdlib.h> template <class T> class SQueue { public: void Push(const T& value); T Pop(); private: stack<T> st1; stack<T> st2; }; template <class T> T SQueue<T>::Pop() { if (st2.size() <= 0) { if (st1.size() == 0) { exit(1); } while ((st1.size() > 0)) { T& top = st1.top(); st2.push(top); st1.pop(); } } T head = st2.top(); st2.pop(); return head; } template <class T> void SQueue<T>::Push(const T& value) { st1.push(value); } int main() { SQueue<int> sq; for (int i = 0; i < 10; ++i) { sq.Push(i); } for (int i = 0; i < 5; ++i) { cout << sq.Pop() << " "; } for (int i = 0; i < 5; ++i) //分兩次驗證 { cout << sq.Pop() << " "; } cout << endl; system("pause"); return 0; }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
您可能感興趣的文章:
- JavaScript數(shù)據(jù)結(jié)構(gòu)學習之數(shù)組、棧與隊列
- C++ 數(shù)據(jù)結(jié)構(gòu)實現(xiàn)兩個棧實現(xiàn)一個隊列
- JavaScript數(shù)組實現(xiàn)數(shù)據(jù)結(jié)構(gòu)中的隊列與堆棧
- Java模擬棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本示例講解
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊列
- 棧和隊列數(shù)據(jù)結(jié)構(gòu)的基本概念及其相關(guān)的Python實現(xiàn)
- LinkedList學習示例模擬堆棧與隊列數(shù)據(jù)結(jié)構(gòu)
- C#數(shù)據(jù)結(jié)構(gòu)與算法揭秘五 棧和隊列
相關(guān)文章
C語言實現(xiàn)職工工資管理系統(tǒng)的示例代碼
這篇文章主要為大家詳細介紹了C語言如何實現(xiàn)職工工資管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08深入分析C語言中結(jié)構(gòu)體指針的定義與引用詳解
本篇文章是對C語言中結(jié)構(gòu)體指針的定義與引用進行了詳細的分析介紹,需要的朋友參考下2013-05-05