题目:用两个栈实现队列

思路:假设两个栈A和B且都为空,可以认为A提供入队列的功能,B提供出队列的功能。入队列:入栈A。出队列:如果B不为空,则直接弹出栈B的数据,如果栈B为空,则依次弹出栈A的数据,放到栈B中,再弹出栈B的数据。

 

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