兩個棧實現乙個佇列

2021-07-13 08:32:56 字數 1373 閱讀 3793

利用棧的特性,實現佇列

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...