码迷,mamicode.com
首页 > 其他好文 > 详细

用两个栈模拟实现一个队列

时间:2015-10-09 22:42:26      阅读:392      评论:0      收藏:0      [点我收藏+]

标签:

 

  题目:如何用两个栈模拟实现一个队列?  如果这两个堆栈的容量分别是m和n(m>n),你的方法能保证的队列容量是多少?(这里讨论的是顺序栈,如果是链式栈的话完全没有必要考虑空间)

  分析:栈的特点是“后进先出(LIFO)”,而队列的特点是“先进先出(FIFO)”。用两个栈模拟实现一个队列的基本思路是:用一个栈作为存储空间,另一个栈作为输出缓冲区,把元素按顺序压入两栈(模拟的队列),并按此顺序出队并输出即可

     如下图,用容量为m的栈作为存储空间,容量为n的栈作为输出缓冲区,一开始先将n个元素压入(push)存储空间m

              技术分享

   随后对存储空间m中的每个元素进行出栈(pop)操作,继而压入(push)输出缓冲区n,如下图所示

                技术分享

   再向存储空间m中压入(push)n+1个元素,两个栈的状态如下图:

                技术分享

   此时将输出缓冲区n中的元素出栈(pop)并输出:Q1,Q2,......,Qn,再对存储空间m中的n个元素进行出栈(pop)并压入输入缓冲区,状态图如下:

                技术分享

   对存储空间m进行一次出栈(pop)操作并输出:Qn+1,最后再对输出缓冲区n中的所有元素进行出栈操作并输出Qn+2,Qn+3,......,Q2n,Q2n+1

   综上所述,两个栈总的输出序列为:Q1,Q2,......,Qn,Qn+1,Qn+2,Qn+3,......,Q2n,Q2n+1。符合队列“先进先出”的特性,模拟成功。

   通过以上分析很易知,所模拟队列的最大容量为2n+1。

用两个栈模拟实现一个队列

标签:

原文地址:http://www.cnblogs.com/eniac12/p/4865158.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!