BCSP-X · 2024 BCSP-X 上半年活动基础知识测评(初中组) 第 9 题

选择题 · 答案 B

← 整套速查表 BCSP-X 全部真题

题目

对于入栈顺序是 a, b, c, d, e 的序列,下面( )不可能是合法的出栈序列

答案:B

解题思维

拿到题别急着套公式,直接拿张草稿纸模拟一遍入栈出栈过程。记住栈的核心是'后进先出',只要模拟时发现某个元素想出栈但还没进栈,或者已经进栈的元素被压在更晚进的下面出不来,那这个序列肯定假。

常见错误

学生最容易犯的错误是把栈和队列搞混,或者死记硬背'出栈序列必须满足某种逆序性质',结果在复杂序列上判断失误。还有很多人会忽略栈的深度限制,以为只要元素顺序对就行,忘了中间压进去的元素必须等上面的都出栈后才能出来。另外,有些同学会试图用数学公式硬算,反而把简单的模拟过程想复杂了。

详细解析(节选)

这道题考查的是栈(Stack)这种线性数据结构的基本特性,核心就是'先进后出'(LIFO)原则。栈只能在顶部进行插入(push)和删除(pop)操作,这意味着后进入的元素一定会先于先进入的元素被弹出。判断一个出栈序列是否合法,最稳妥也最直观的方法就是模拟:按照给定的入栈顺序 a, b, c, d, e 依次操作,看看能否完美复现目标出栈序列。

我们逐一验证选项:

A. a, b, c, d, e:这是最理想的情况。来了一个就弹一个。a进a出,b进b出……完全合法。

C. b, a, d, c, e:先看b,a还没进,先把a压进去,然后b出。接着a出,没问题。d进d出,c进c出,最后e进e出。这个序列也是合法的。

D. c, b, a, d, e:c要出,必须a、b、c都进栈。此时栈底是a,中间是b,顶是c。c出,b出,a出,顺序完美。然后d进d出,e进e出。合法。

B. d, b, c, a, e:这里就露馅了。为了弹出d,我们必须先把a、b、c、d全部压入栈中。此时栈的状态是:栈底为a,接着是b,然后是c,栈顶是d。

当d成功弹出后,栈顶立刻变成了c。因为栈是后进先出,c必须在b之前弹出。但是选项B要求的下一个元素是b,这意味着c还没出,b却先出来了,这在物理上是不可能的,b被压在c下面,出不来。所以这个序列不合法。

命题视角:这类题通常不会让你背复杂的数学定理,而是考察你对'栈顶'这个概念的敏感度。命题人喜欢挖的坑往往在于:元素入栈后,如果中间插入了其他元素,那么之前入栈的元素必须等新元素全部出栈后才能出。很多同学容易忽略这种'遮挡'关系。

思考心法:遇到这种题,脑子里要时刻维护一个'当前栈'。每看到一个出栈元素,先检查它是不是在栈顶,如果是,弹出;如果不是,就继续入栈直到它出现。如果入栈完所有元素还没找到它,那就说明这个序列非法。模拟过程一定要按顺序来,不能跳跃。

考频与趋势:栈的模拟与合法性判断是信息学竞赛中的高频考点,尤其在 CSP-J/S 和 GESP 的入门阶段,几乎每年必考。从历年数据看,这类题目通常以单选形式出现,分值适中,主要考察基础数据结构的理解。

预测:基于当前考频和题型分布,未来这类题目可能会继续以单选形式考察,或者结合简单的字符串处理、括号匹配等场景出现。暂无足够依据预测具体的变体形式,但核心依然是'模拟'二字。

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断