两个栈模拟一个队列

两个栈模拟一个队列,1号栈为入队,栈顶表示队尾;2号栈为出队,栈顶表示队首。

入队,直接进1号栈;出队,先判断2号栈是否有元素,有元素就直接弹出栈顶即队首,如果2号栈没有元素,则将1号栈的元素顺序弹出并进2号栈。

[cpp]  view plain copy
  1. #include <iostream>  
  2. #include <stack>  
  3. #include <assert.h>  
  4. using namespace std;  
  5.   
  6. template<typename T>  
  7. class CQueue{     
  8.     public:  
  9.         CQueue(){}  
  10.         ~CQueue(){}  
  11.         void appendTail(const T& node);//入队  
  12.         void deleteHead();//出队  
  13.         T front();//取队首  
  14.     private:  
  15.         stack<T> m_stack1;  
  16.         stack<T> m_stack2;  
  17. };  
  18.   
  19. template<typename T>void CQueue<T>::appendTail(const T& node)  
  20. {  
  21.     m_stack1.push(node);  
  22. }  
  23.   
  24. template<typename T>void CQueue<T>::deleteHead()  
  25. {  
  26.     if(m_stack2.empty())  
  27.     {  
  28.         while(!m_stack1.empty())  
  29.         {         
  30.             m_stack2.push(m_stack1.top());  
  31.             m_stack1.pop();  
  32.         }  
  33.     }  
  34.     assert(m_stack2.size()>0);  
  35.     m_stack2.pop();  
  36. }  
  37.   
  38. template<typename T>T CQueue<T>::front()  
  39. {  
  40.     if(m_stack2.empty())  
  41.     {  
  42.         while(!m_stack1.empty())  
  43.         {             
  44.             m_stack2.push(m_stack1.top());  
  45.             m_stack1.pop();  
  46.         }  
  47.     }  
  48.     assert(m_stack2.size()>0);  
  49.     return m_stack2.top();  
  50. }  
  51.   
  52.   
  53. void main()  
  54. {  
  55.     CQueue<int> q;  
  56.     q.appendTail(13);  
  57.     q.appendTail(41);  
  58.     q.appendTail(86);  
  59.     q.appendTail(90);  
  60.     q.appendTail(32);  
  61.   
  62.     cout<<q.front()<<"出队"<<endl;  
  63.     q.deleteHead();  
  64.     cout<<"队首:"<<q.front()<<endl;  
  65.   
  66. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值