两个队列实现为一个栈

#include <queue>  
#include <iostream>  
using namespace std; 
template < typename T> 
class Stack_by_queue 
     public
         Stack_by_queue(){}; 
         ~Stack_by_queue(){}; 
         void append_tail( const T& node); 
         T delete_head(); 
         void Show_Stack( void ); 
     protected
     private
         queue<T> queue1; 
         queue<T> queue2; 
}; 
template < typename T> 
void Stack_by_queue<T>::Show_Stack( void
     queue<T> Q1(queue1); 
     queue<T> Q2(queue2); 
     T tmp; 
     cout<< "\n this is Show_Stack!从栈顶到栈底显示数据\n"
     while (!Q1.empty() || !Q2.empty()) 
    
            if (Q1.empty() && !Q2.empty()) 
        
             //2->1  
             if (Q2.size() < 1) 
            
                 return
            
             while (Q2.size() != 1) 
            
                 tmp = Q2.front(); 
                 Q2.pop(); 
                 Q1.push(tmp); 
            
             cout<<Q2.front()<< "  "
             Q2.pop(); 
        
         if (!Q1.empty() && Q2.empty()) 
        
             //1->2  
             if (Q1.size() < 1) 
            
                 return
            
             while (Q1.size() != 1) 
            
                 tmp = Q1.front(); 
                 Q1.pop(); 
                 Q2.push(tmp); 
            
             cout<<Q1.front()<< "  "
             Q1.pop(); 
   
        
    
   
//保证在所有的过程中,至少队列有一个是空的  
template < typename T> 
T Stack_by_queue<T>::delete_head() 
     T tmp; 
     if (queue1.empty() && !queue2.empty()) 
    
         //2->1  
         if (queue2.size() < 1) 
        
         return -1; 
        
         while (queue2.size() != 1) 
        
             tmp = queue2.front(); 
             queue2.pop(); 
             queue1.push(tmp); 
        
         tmp = queue2.front(); 
         queue2.pop(); 
         return tmp; 
    
     if (!queue1.empty() && queue2.empty()) 
    
         //1->2  
         T tmp; 
         if (queue1.size() < 1) 
        
             return -1; 
        
         while (queue1.size() != 1) 
        
             tmp = queue1.front(); 
             queue1.pop(); 
             queue2.push(tmp); 
        
         tmp = queue1.front(); 
         queue1.pop(); 
         return tmp; 
    
     else 
         return -1; 
template < typename T> 
void Stack_by_queue<T>::append_tail( const T& node ) 
     //保证有一队列为空,若全为空,则队空,任选一个队列就行  
     if (queue1.empty() && !queue2.empty()) 
         queue2.push(node); 
     if (!queue1.empty() && queue2.empty()) 
         queue1.push(node); 
     if (queue1.empty() && queue2.empty()) 
         queue1.push(node); 
     else 
         return
int main() 
     Stack_by_queue< char > my_stack; 
     my_stack.append_tail( 'a' ); 
     my_stack.append_tail( 'b' ); 
     my_stack.append_tail( 'c' ); 
     my_stack.Show_Stack(); 
   
   
     my_stack.delete_head(); 
     my_stack.delete_head(); 
     my_stack.Show_Stack(); 
   
     my_stack.append_tail( 'd' ); 
     my_stack.append_tail( 'e' ); 
     my_stack.Show_Stack(); 
   
     my_stack.delete_head(); 
     my_stack.Show_Stack(); 
   
     my_stack.append_tail( 'f' ); 
     my_stack.Show_Stack(); 
/**************************
运行结果:
  
  this is Show_Stack!从栈顶到栈底显示数据
c  b  a
  this is Show_Stack!从栈顶到栈底显示数据
a
  this is Show_Stack!从栈顶到栈底显示数据
e  d  a
  this is Show_Stack!从栈顶到栈底显示数据
d  a
  this is Show_Stack!从栈顶到栈底显示数据
f  d  a
  
  
***************************/ 
 
#include <queue>
#include <iostream>
using namespace std;
template < typename T>
class Stack_by_queue
{
     public :
         Stack_by_queue(){};
         ~Stack_by_queue(){};
         void append_tail( const T& node);
         T delete_head();
         void Show_Stack( void );
     protected :
     private :
         queue<T> queue1;
         queue<T> queue2;
};
template < typename T>
void Stack_by_queue<T>::Show_Stack( void )
{
     queue<T> Q1(queue1);
     queue<T> Q2(queue2);
     T tmp;
     cout<< "\n this is Show_Stack!从栈顶到栈底显示数据\n" ;
     while (!Q1.empty() || !Q2.empty())
     {
            if (Q1.empty() && !Q2.empty())
         {
             //2->1
             if (Q2.size() < 1)
             {
                 return ;
             }
             while (Q2.size() != 1)
             {
                 tmp = Q2.front();
                 Q2.pop();
                 Q1.push(tmp);
             }
             cout<<Q2.front()<< "  " ;
             Q2.pop();
         }
         if (!Q1.empty() && Q2.empty())
         {
             //1->2
             if (Q1.size() < 1)
             {
                 return ;
             }
             while (Q1.size() != 1)
             {
                 tmp = Q1.front();
                 Q1.pop();
                 Q2.push(tmp);
             }
             cout<<Q1.front()<< "  " ;
             Q1.pop();
 
         }
     }
 
}
//保证在所有的过程中,至少队列有一个是空的
template < typename T>
T Stack_by_queue<T>::delete_head()
{
     T tmp;
     if (queue1.empty() && !queue2.empty())
     {
         //2->1
         if (queue2.size() < 1)
         {
         return -1;
         }
         while (queue2.size() != 1)
         {
             tmp = queue2.front();
             queue2.pop();
             queue1.push(tmp);
         }
         tmp = queue2.front();
         queue2.pop();
         return tmp;
     }
     if (!queue1.empty() && queue2.empty())
     {
         //1->2
         T tmp;
         if (queue1.size() < 1)
         {
             return -1;
         }
         while (queue1.size() != 1)
         {
             tmp = queue1.front();
             queue1.pop();
             queue2.push(tmp);
         }
         tmp = queue1.front();
         queue1.pop();
         return tmp;
     }
     else
         return -1;
}
template < typename T>
void Stack_by_queue<T>::append_tail( const T& node )
{
     //保证有一队列为空,若全为空,则队空,任选一个队列就行
     if (queue1.empty() && !queue2.empty())
         queue2.push(node);
     if (!queue1.empty() && queue2.empty())
         queue1.push(node);
     if (queue1.empty() && queue2.empty())
         queue1.push(node);
     else
         return ;
}
int main()
{
     Stack_by_queue< char > my_stack;
     my_stack.append_tail( 'a' );
     my_stack.append_tail( 'b' );
     my_stack.append_tail( 'c' );
     my_stack.Show_Stack();
 
 
     my_stack.delete_head();
     my_stack.delete_head();
     my_stack.Show_Stack();
 
     my_stack.append_tail( 'd' );
     my_stack.append_tail( 'e' );
     my_stack.Show_Stack();
 
     my_stack.delete_head();
     my_stack.Show_Stack();
 
     my_stack.append_tail( 'f' );
     my_stack.Show_Stack();
}
/**************************
运行结果:
 
  this is Show_Stack!从栈顶到栈底显示数据
c  b  a
  this is Show_Stack!从栈顶到栈底显示数据
a
  this is Show_Stack!从栈顶到栈底显示数据
e  d  a
  this is Show_Stack!从栈顶到栈底显示数据
d  a
  this is Show_Stack!从栈顶到栈底显示数据
f  d  a
 
 
***************************/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值