两个栈模拟一个队列 两个队列模似一个栈

请利用两个栈S1和S2来模拟一个队列,

    利用两个队列D1和D2来模拟一个栈。

已知栈的三个运算定义如下:

PUSH(ST,x):元素x入ST栈;

POP(ST,x):ST栈顶元素出栈,赋给变量x;

count(ST):ST栈的元素个数。

那么如何利用栈的运算来实现该队列的三个运算:

enqueue:插入一个元素入队列;

dequeue:删除一个元素出队列;

queue_count:队列的元素个数。(请写明算法的思想及必要的注释)

 

1)使用两个栈S1和S2来模拟一个队列。

算法思路:

分别使用S1实现入队列,使用S2实现出队列。

入队列:

入栈S1.

出队列:

如果S2为空则将S1中元素全部出栈到S2,再由S2出栈栈顶元素,否则直接从S2出栈栈顶元素.

元素个数:

就是S1S2的元素个数和.

 

参考  <http://blog.sina.com.cn/s/blog_895a150201010wgs.html>

http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html

 

2)使用两个队列Q1Q2来模拟一个栈。

算法思路:

Q1Q2一直保持至少有一个为空,作为出栈时候的缓冲区。

入栈:

如果Q2不为空则向Q2入队列;否则向Q1入队列.

出栈:

如果Q1,Q2都为空,不作操作;如果Q2为空,则把Q1中除了队尾的元素外全部入队列Q2,最后一个元素出队列;否则把Q2中除队尾的元素外全部入队列Q1,最后一个元素出队列

元素个数:

就是Q1Q2的元素个数和

参考 http://blog.csdn.net/djb100316878/article/details/41820953

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值