对于入栈顺序为 $a, b, c, d, e, f, g$ 的序列,下列( )不可能是合法的出栈序列。
这题核心就是模拟栈的进出过程,拿到选项后别急着记结论,直接按顺序压入栈里,每弹出一个元素就检查栈顶是不是下一个要出的,一旦发现栈顶不是,立刻就能判定非法,C 选项就是这么露馅的。
最容易掉进 C 选项的坑,因为前几个元素 a、d 看起来挺顺,但弹完 d 后栈里剩 a、b、c,栈顶明明是 c,题目却让你先弹 b,这违反栈的后进先出原则,很多同学会下意识觉得只要前面没冲突就行,忽略了当前时刻栈顶必须匹配下一个出栈元素这一硬性条件。
栈(Stack)是一种只允许在一端进行插入和删除操作的线性表,遵循“后进先出”(LIFO)原则。元素从栈顶进栈,也只能从栈顶出栈,中间的元素被压在下面,必须先把上面的弹出来才能碰到它。
命题人出这道题,不是要考你死记硬背“出栈序列合法性的数学公式”,而是要考你动态模拟能力和对栈特性的直觉。这类题常把几个看似合理的序列混在一起,其中只有一个序列在某一步“突然”要求弹出被压在下面的元素,这就是坑所在。C 选项就是典型的“前面顺风顺水,中间突然撞墙”的例子,专门用来检验学生是否真的在每一步都检查了栈顶。