利用棧的特性,實現佇列
1.棧-後進先出,佇列-先進先出,使用兩個棧,棧1作用為push資料用,棧2作為pop資料用。
2.原理分析:
1).push資料-當模擬實現的queue push資料往棧1中push。
2).pop資料-判斷棧2是否為空,如果棧2為空,則首先將棧1的資料壓入到棧2中(依次取棧頂元素push到棧2中),然後pop棧2的棧頂元素。如果,棧2有元素,直接pop棧2的棧頂元素。
3).列印元素
a:棧1和棧2都沒有元素--直接返回。
b:棧1有元素且棧2沒有元素--將棧1的元素push到棧2中,然後依次列印棧2的元素。
c:棧1沒有元素且棧2有元素--直接依次列印棧2的元素。
d:棧1有元素且棧2有元素--首先依此列印棧2的元素(每列印乙個元素就pop掉),然後將棧1的元素push到棧2中,然後依次列印棧2的元素。
class queue //使用的是庫中的棧
void pop()
if (!_st2.empty())
else
_st2.pop();}}
void print()
else if ((!_st1.empty()) && _st2.empty()) //棧1有元素且棧2沒有元素
while (!tmp2.empty())
cout << endl;
}else if (_st1.empty() && (!_st2.empty())) //棧1沒有元素且棧2有元素
}else if ((!tmp1.empty()) && (!tmp2.empty())) //棧1有元素且棧2有元素
while (!tmp1.empty())
while (!tmp2.empty())}}
private:
stack_st1; //棧1
stack_st2; //棧2
};
以上就是本人在學習過程中的一些經驗總結。當然,本人能力有限,難免會有紕漏,希望大家可以指正。
本文出自 「做乙個小小小司機」 部落格,請務必保留此出處
兩個棧實現乙個佇列 兩個佇列實現乙個棧
這兩個題的思路比較相似。棧的特點是 先進後出 佇列的特點是 先進先出 不要怕!用兩個棧實現乙個佇列很簡單 再將top元素push到stack 2中,然後將stack 1 pop一次直到stack 1剩下最後乙個元素,這個就是最先push進去的,我們把它pop掉就可以了,同理,我們求queue的fro...
兩個棧實現乙個佇列,兩個佇列實現乙個棧
1 兩個棧實現乙個佇列 入隊時,直接壓入stack1中。出隊時,判斷stack2是否為空,如果stack2為空,則將stack1中的元素倒入stack2中,否則直接彈出stack2中的元素。入隊操作 void enqueue stack s1,stack s2,int m 出隊操作 void deq...
兩個棧實現乙個佇列 兩個佇列實現乙個棧
方法一 public class main 出棧操作 public int deletehead while stack1.isempty return stack2.pop 方法二 public class main public int deletehead throws exception i...