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

2017-09-30  本文已影响61人  Deeglose

问题描述

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

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

解法

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

示意图

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

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

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

为了使4第一个出栈所做的操作 余下的操作,使5入栈,然后弹出5,然后弹出所有元素。结果就是4 5 3 2 1
上一篇 下一篇

猜你喜欢

热点阅读