题目:一个栈的入栈序列是A、B、C、D、E,则栈的不可能的输出序列()
A、EDCBA B、DECBA C、DCEAB D、ABCDE
题目从手工操作方面比较容易理解,需要借用一个辅助栈,先理一遍思路:
先看B答案:
(0)实始态
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-
一开始有i,j两个下标指向入栈序和出栈序,我们需要C最先出栈,那么就应该让C处于当前栈顶的位置。
因此,需要将ABC入栈
(1)第一步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-ABC
栈顶为C,出栈序列的j位置为C,刚好可以匹配,因此j后移一位,从栈中弹出栈顶元素
(2)第二步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-AB
栈顶为B,出栈序列的j位置D,并不匹配,那么需要想办法使得栈顶元素为D.这时可以使入栈序列的i位置的字符继续进栈,期望使得栈顶元素为D。
(3)第三步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-ABD
栈顶为D,出栈序列的j位置为D,刚好可以匹配,因此j后移一位,从栈中弹出栈顶元素.
(4)第四步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-AB
栈顶为B,而出栈序列读头j下也是B,可以匹配,因此j后移一位,从栈中弹出栈顶元素。
(4)第四步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-A
栈顶为A,而出栈序列读头j下是E,不匹配,入栈序列的i位置的字符继续进栈。
(4)第五步
入栈序列是ABCDE
i
出栈序列是CDBEA
j
栈:|-AE
栈顶为E,而出栈序列读头j下也是E,可以匹配,因此j后移一位,从栈中弹出栈顶元素。<