两个栈实现一个队列

一问题描述

两个栈实现一个队列的操作
appendTail
  将要插入的元素push进s1。注意此处不需要,再把s2中的元素导入到s1了,因为s1和s2两者的顺序是相反的。
deleteHead
 如果s2中的元素不为空,则直接弹出栈顶 
 若为空,则需要把s1中的元素依次push进s2中,并删除s2中的栈顶  

综上
  可以直接插入s1中元素,删除时,若是s2为空,则需要把s1中的元素插入进s2中,然后对s2实行删除操作。

二 代码如下

#include <iostream>
#include 
<stack>
#include 
<assert.h>
 
using namespace std ;
 template 
<class T>
  
class CQueue
  
{
    
public :
        CQueue() 
{}     
        
~CQueue() {} 
        
        
void appendTail(const T & node) ;
        
void deleteHead() ;
        
    
private :
        stack 
<T> m_stack1 ;
        stack 
<T> m_stack2 ;                 
  }
 ;
 template 
<class T>  
 
void CQueue<T>::appendTail(const T & node) //添加尾部 
 {    
    m_stack1.push(node) ;
 }

 
 template 
<class T>
 
void CQueue<T>::deleteHead()  //删除头部 
 {
    
if(!m_stack2.empty())
   
{
     cout
<<m_stack2.top()<<endl ;   
     m_stack2.pop() ;
   }
    
   
else
   

     assert(
!m_stack1.empty()) ; //两个栈都为空,则出现异常错误 
     
        
     
while(!m_stack1.empty())  //将s1中的元素全部push进s2,最后在s2中=删除栈顶 
     {
       m_stack2.push(m_stack1.top()) ;
       m_stack1.pop() ;                   
     }
     
   }
  
 }

 
  
  
   
 
int main()
 
{
   CQueue
<int> queue ;
  
/* queue.appendTail(5) ;
   queue.appendTail(4) ;
   queue.appendTail(3) ;
  
*/
 
   
   queue.deleteHead() ;
   queue.deleteHead() ;
   queue.deleteHead() ;
   queue.appendTail(
2);
   queue.appendTail(
1);
   queue.deleteHead() ;
   queue.deleteHead() ;
    queue.deleteHead() ;
     queue.deleteHead() ;
   system(
"pause") ;
   
return 0 ;    
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值