兩個隊列實現一個棧

在C++ STL中有雙向隊列deque,當單向的來用就行,設有兩個隊列A和B,棧的push操作,直接push到A的隊尾就行了。棧的pop操作時,將A中的隊列依次取出放到B中,取到最後一個時,最後一個不要放到B中,直接刪掉,再將B中的值依次放回A中。棧的top操作時,將A中的隊列依次取出放到B中,取到最後一個時,將最後一個值記錄下來,再將最後一個值放到B中,再將B中的值依次放回到A中。

  1. #include<stdafx.h>  
  2. #include<iostream>  
  3. #include <deque>  
  4. using namespace std;  
  5. template<class T> class Mystack  
  6. {  
  7. public:  
  8.     Mystack(){}  
  9.     ~Mystack(){}  
  10.     void push(T t);  
  11.     T top();  
  12.     void pop();  
  13. private:  
  14.     deque<T> A;  
  15.     deque<T> B;  
  16.  
  17. };  
  18.  
  19. template<class T> void  Mystack<T>::push(T t)  
  20. {  
  21.     A.push_back(t);  
  22. }  
  23. template<class T> T Mystack<T>::top()  
  24. {  
  25.     while(A.size()>1)  
  26.     {  
  27.         B.push_back(A.front());  
  28.         A.pop_front();  
  29.     }  
  30.  
  31.     T tmp=A.front();  
  32.     B.push_back(A.front());  
  33.  
  34.     A.pop_front();  
  35.     while(B.size()!=0)  
  36.     {  
  37.         A.push_back(B.front());  
  38.         B.pop_front();  
  39.     }  
  40.     return tmp;  
  41. }  
  42. template<class T> void Mystack<T>::pop()  
  43. {  
  44.     while(A.size()>1)  
  45.     {  
  46.         B.push_back(A.front());  
  47.         A.pop_front();  
  48.     }  
  49.     A.pop_front();  
  50.     while(B.size()!=0)  
  51.     {  
  52.         A.push_back(B.front());  
  53.         B.pop_front();  
  54.     }  
  55.  
  56.  
  57. }  
  58. void main()  
  59. {  
  60.     Mystack<int> a;  
  61.     for(int i=0;i<10;i++)  
  62.         a.push(i);  
  63.     for(int i=0;i<10;i++)  
  64.     {  
  65.         cout<<a.top()<<endl;  
  66.         a.pop();  
  67.     }  
  68.       

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章