使用双栈实现一个队列
生活随笔
收集整理的這篇文章主要介紹了
使用双栈实现一个队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在往上看到這樣的題目:
?
大體的有如下幾個思路:
1?一個棧維護隊列的內容,當入隊列的操作的時候就直接入s1棧,當出隊列的時候就現將s1棧底以外的內容都push到s2中保存起來,將s1棧底返回后將s2內容在彈回來。
2 s1作為壓棧之用,s2作為出棧之用。入隊列的時候就直接檢查s1中有無對象,沒有檢查s2,如果s2中有對象就將s2中值全部彈回s1,再將新的對象入棧。
3 最后一種與上面相同,不過棧的作用發生了改變。
這里就簡單列出第二種的實現: (同理的,雙隊列實現棧也可以類似的實現,且方法也是類似的)
1 class Stack{ 2 //... 3 void push(int ); 4 int pop(); 5 int count(); 6 //... 7 }; 8 9 class Queue{ 10 public: 11 void enqueue(int ); 12 int dequeue(); 13 int count() const; 14 private: 15 Stack s1; 16 Stack s2; 17 }; 18 19 //1為入棧用,2作為出棧用 20 void Queue::enqueue(int obj) 21 { 22 if(s1.count() == 0 && s2.count() != 0){ 23 while(s2.count() != 0){ 24 s1.push(s2.pop()); 25 } 26 s1.push(obj); 27 }else{ 28 s1.push(obj); 29 } 30 } 31 32 int Queue::dequeue() 33 { 34 if(s2.count() == 0 && s1.count() != 0){ 35 while(s1.count() != 0){ 36 s2.push(s1.pop()); 37 } 38 return s2.pop(); 39 }else{ 40 if(s2.count() != 0) 41 return s2.pop(); 42 } 43 }?
轉載于:https://www.cnblogs.com/-wang-cheng/p/4900987.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的使用双栈实现一个队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle基础 游标
- 下一篇: xib cell用法