【面试题】入栈元素的出队序列问题

问题描述

这个问题经过我的思考,其实解法更加简单
一般性的问题是:有一组数和一个栈,给定这组数的入栈顺序,判断哪些出栈序列是不可能的。
譬如,对于1 2 3 4 5, 出栈序列4 5 3 2 1就是可能的
对应的操作如下:
1.压入 1 2 3 4
2.弹出 4
3.压入 5
4.弹出剩余的元素

问题是,这些操作序列是怎么得到的?

解法

使用两个队列和一个栈实现,如下图所示

示意图

入栈序列代表了入栈的顺序,一般就是题目给定的数。队列首部是第一个入栈的数。
临时栈用来临时存放入栈但是尚未弹出栈的数。
出栈序列就是结果。

一般的问题是已知入栈序列和出栈序列,判断出栈序列是否可能。
步骤:

  • 将给定的数按顺序放入入栈序列
  • 依次分析出栈序列的首部(第一个数)k,为了k第一个出栈,入栈序列中k以及k之前的所有数必须入栈,然后弹出k
  • 如果k不存在于入栈序列中,k必然是栈顶元素,弹出k即可
  • 如果k既不在栈顶也不在入栈序列中,则出栈序列不可能

以入栈序列 1 2 3 4 5,出栈序列4 5 3 2 1为例,过程如下:

为了使4第一个出栈所做的操作
余下的操作,使5入栈,然后弹出5,然后弹出所有元素。结果就是4 5 3 2 1
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 总结 想清楚再编码 分析方法:举例子、画图 第1节:画图分析方法 对于二叉树、二维数组、链表等问题,都可以采用画图...
    M_巴拉巴拉阅读 1,230评论 0 7
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,367评论 11 349
  • 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不...
    曲终人散Li阅读 3,371评论 0 19
  • 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。...
    鸿雁长飞光不度阅读 719评论 0 0
  • “ 也没什么太大的愿望,只希望能一家人整整齐齐,健健康康,快快乐乐,幸幸福福的在一起就好了 。”
    李美耳子阅读 181评论 0 2