数据结构有一道题是这样的:依次读入数据元素序列{a, b, c, d, e, f, g} 进栈,每进一个元素,机器可要求下一个元素进栈或弹栈,如此进行,则栈空时弹出的元素构成的序列是以下那些序列?( )
- A. {d, e, c, f, b, g, a}
- B. {f, e, g, d, a, c, b}
- C. {e, f, d, g, b, c, a}
- D. {c, d, b, e, f, a, g}
解析:首先这题应该选择 A,是单选题。其次这题中 B 和 C 都是不合法序列,而 A 和 D 都是合法序列,所以疑惑的点应该在于为什么选择 A。书本上的答案解析是这样的:
让人摸不着头脑,不过我们可以得知一个强调信息 ”栈空时“。
先来看为什么 B 和 C 是不合法的序列:
而 A 和 D 都是合法序列,但题目要求的是 “栈空时弹出的元素构成的序列”,也就是说当栈为空时,弹出的元素构成的序列就是答案。如下图所示(↑
表示入栈;↓
表示出栈),在 A 选项中,a
处于栈底,当 a
弹出后,此时就已经栈空,弹出的元素构成的序列也就是 A 选项,并且入栈的所有元素都在出栈序列中;D 选项也是 a
处于栈底,当 a
弹出后也是栈空状态,属于第一次栈空,但此时已经弹出栈的元素序列是 { c, d, b, e, f, a}
,是缺少了 g
元素的,而当 g↑g↓
执行后才能是 D 选项的结果,但这时已经是第二次栈空了,不太符合题意。
[注]
:以上都是个人理解,若有疑惑可在评论区讨论进行修正。