美文网首页
【面试题】入栈元素的出队序列问题

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

作者: Deeglose | 来源:发表于2017-09-30 15:38 被阅读61次

    问题描述

    这个问题经过我的思考,其实解法更加简单
    一般性的问题是:有一组数和一个栈,给定这组数的入栈顺序,判断哪些出栈序列是不可能的。
    譬如,对于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

    相关文章

      网友评论

          本文标题:【面试题】入栈元素的出队序列问题

          本文链接:https://www.haomeiwen.com/subject/jhzgextx.html