两个栈实现一个队列和两个队列实现一个栈

栈的特性:先进后出(FILO);      队列的特性:先进先出(FIFO)

1、两个栈实现一个队列

(1)思路:入栈时,直接压入栈1中;如果栈1满了,判断栈2是否为空,若为空,则将栈1元素全部倒入栈2,再入栈;若栈2不为空,则不能再入元素;

                  出栈时,判断栈2是否为空,若栈为空,则将栈1中的元素倒入栈2,否则直接弹出栈2中的元素;

(2)代码实现:

1 //入队操作
 2 void EnQueue(stack<int> &s1,stack<int> &s2,int m)
 3 {
 4     s1.push(m);
 5 }
 6 
 7 //出队操作
 8 void DeQueue(stack<int> &s1,stack<int> &s2,int &m)
 9 {
10     if (s2.empty())
11     {
12         int p = s1.size();
13         for (int i=0;i<p;i++)
14         {
15             s2.push(s1.top());//依次将栈1中的元素放入栈2
16             s1.pop();
17         }    
18     }
19     m = s2.top();   //获取栈2顶部元素
20     s2.pop();
21 }

2、两个队列实现一个栈

(1)思路:将queue1用作进栈出栈,queue2作为一个中转站;

                 入栈时,直接压入queue1;

                 出栈时,先将queue1中的元素除最后一个元素依次出队列,并压入queue2中,将留在queue1中的最后一个元素出                   队列即为出栈元素,最后还要把queue2中的元素再次压入queue1中;       

 //进栈操作
 2 void stackpush(queue<int> &q1,queue<int> &q2,int m)
 3 {
 4     q1.push(m);
 5 }
 6 
 7 //出栈操作
 8 void stackpop(queue<int> &q1,queue<int> &q2,int &m)
 9 {
10     int p = q1.size();
11     for (int i=0;i<p-1;i++)
12     {
13         q2.push(q1.front());
14         q1.pop();
15     }
16     m = q1.front();
17     q1.pop();
18     int l = q2.size();
19     for (int j = 0;j<l;j++)
20     {
21         q1.push(q2.front());
22         q2.pop();
23     }
24 }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值