您好,登錄后才能下訂單哦!
棧結構:先進后出,后進先出,只允許在棧尾操作。
隊列:先進先出,在隊尾入隊,在隊頭出隊。
要想用兩個棧實現(xiàn)一個隊列,就需要使用一個相當于中間量的結構進行隊列的入隊和出隊操作。
用圖形象化為:
這樣問題就從圖中得出了思路:
入隊操作:把入隊元素一一存入一個棧結構中即可。
出隊操作:出隊時,先判斷另一個棧結構中是否有元素,若有先將元素出棧Pop();若為空,則把棧S1中的元素全部倒入Push()棧S2中,然后讓S2棧頂元素出棧Pop(),此時的元素序列和棧S1中剛好相反,即達到出隊效果。
那么,用代碼實現(xiàn)也變得簡單:
#include <iostream> #include <stack> using namespace std; class Queue { public: void Push_Queue(int val) { s1.push(val); // 實現(xiàn)了入隊尾入隊操作 cout <<s1.top() << " "; } void Pop_Queue() { if (s2.empty()) { while (s1.top()) { s2.push(s1.top()--); } s2.pop(); // 實現(xiàn)了隊頭出隊操作 } else { s2.pop(); } } void Show() { cout << endl; // 因為使用的是系統(tǒng)庫stack,其pop函數(shù)返回值為void,所以不能打印出來,我們只打印pop后的隊頭元素進行驗證 cout << s2.top() << endl; } private: stack<int> s1; stack<int> s2; }; int main() { Queue q; // ??構造函數(shù)的參數(shù) q.Push_Queue(1); q.Push_Queue(2); q.Push_Queue(3); q.Push_Queue(4); q.Push_Queue(5); q.Pop_Queue(); q.Show(); // 打印pop后的對頭元素 system("pause"); return 0; }
如有紕漏,歡迎指正。
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。