请利用两个栈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出栈栈顶元素. |
元素个数: | 就是S1和S2的元素个数和. |
参考 <http://blog.sina.com.cn/s/blog_895a150201010wgs.html>
http://www.cnblogs.com/wanghui9072229/archive/2011/11/22/2259391.html
2)使用两个队列Q1和Q2来模拟一个栈。
算法思路:
Q1和Q2一直保持至少有一个为空,作为出栈时候的缓冲区。
入栈: | 如果Q2不为空则向Q2入队列;否则向Q1入队列. |
出栈: | 如果Q1,Q2都为空,不作操作;如果Q2为空,则把Q1中除了队尾的元素外全部入队列Q2,最后一个元素出队列;否则把Q2中除队尾的元素外全部入队列Q1,最后一个元素出队列 |
元素个数: | 就是Q1和Q2的元素个数和 |
参考 http://blog.csdn.net/djb100316878/article/details/41820953