两个队列实现一个栈

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

 

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