Skip to content

2022年 408 数据结构 第 2 题

数据结构2022年选择题2分

题目

给定有限符号集 S, in 和 out 均为 S 中所有元素的任意排列。对于初始为空的栈 ST, 下列叙述中,正确的是( )。

错因

A

把"出栈序列种类很多"误等同于"无法判断"。给定 in 后,对任意一个 out,用一个辅助栈模拟就可以唯一判断 out 是否合法(每读一个 in 元素就压栈,每当栈顶等于当前 out 元素就弹栈),所以是可以判断的。"很多种可能"和"无法判断"不是一回事。

B

和 A 是镜像错误。给定 out 后,问某个具体的 in 能否产生它,照样可以模拟判断(栈底元素必须最后出来、出栈次序受栈 LIFO 约束)。可判与否问的是"能不能验证",不是"有几种可能"。

C

举一个反例就推翻了:若每个元素都"压一个、立刻弹一个"(push a, pop a, push b, pop b, …),那么 in 和 out 完全相同。所以"in 与 out 一定不同"不成立。选 C 的人可能是把"栈是 LIFO 所以会反序"的直觉过度泛化了。

总解析

思路:逐项判断。

A、B 错在"不能判断"。给定 in 与 out 的具体序列,用一个辅助栈模拟入出栈过程总能验证两者是否合法对应(合法的充要条件:模拟过程中每次需要弹出某元素时该元素恰好在栈顶或还能继续入栈推进到栈顶)。所以"可判断",A、B 都不对。

C 错在"一定不同"。当出栈节奏与入栈节奏完全交替(push x → pop x → push y → pop y → …)时,in 与 out 是同一个序列。所以"一定不同"被反例推翻。

D 正确:"互为倒序"是栈最经典的形态——全部元素先入栈、再依次出栈,则出栈序列正好是入栈序列的逆序(LIFO)。例如 in = ,全部压栈再全部弹出,out = 。这是栈合法的出栈序列之一,"可能"成立。

最终答案是 D

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数