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

来源:互联网 发布:长沙大数据招聘 编辑:程序博客网 时间:2024/05/17 08:31

请利用两个栈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

0 0
原创粉丝点击