NOIP 普及组初赛 · NOIP 2012 普及组初赛试题 第 12 题

选择题 · 答案 D · 考点:栈(stack)

← 整套速查表 NOIP 普及组初赛 全部真题

题目

如果一个栈初始时为空,且当前栈中的元素从栈底到栈顶依次为 $a,b,c$,另有元素 $d$ 已经出栈,则可能的入栈顺序是( )。

答案:D

考点

栈(stack) 讲解 →栈(stack) 真题汇总 →

解题思维

这题考栈的后进先出特性。拿到题先想:d已出栈说明它比a、b、c都早入栈且早出栈。所以d必须在a之前入栈,直接锁定选项即可。

常见错误

很多学生会死记‘栈顶元素最先出’,看到当前栈是a,b,c就误以为d是最后入栈的,或者把入栈顺序和出栈顺序搞混。其实d已经出栈了,说明它入栈后立刻(或中间)就出来了,它不可能在a、b、c之后入栈,否则d还在栈里。另外,学生容易只看最终栈里有没有a,b,c,而忽略d的状态,导致选错C或A。

详细解析(节选)

这道题考查的是栈(stack)的基本操作规则:后进先出(LIFO)。命题人喜欢用这种‘中间状态’来挖坑——不让你看完整的进出过程,只给一个片段,让你反推入栈顺序。这种题在初赛里很常见,因为栈是数据结构里的基础,但学生往往只背口诀,不会真正模拟。拿到题,先别急着看选项,脑子里把栈想象成一个杯子:只能从上面塞、从上面拿。现在杯子里从底到顶是a、b、c,而且d已经拿走了。这意味着d肯定比a、b、c都早塞进去,而且塞进去之后立刻(或中间)就拿出来,否则d还在杯子里。所以d必须在a之前入栈。再看选项:A里a在d前面,d不可能先出来;B里b在d前面,d更不可能先出来;C里a在d前面,同样不行;只有D是d先于a入栈,符合逻辑。验证一下D的过程:d入→d出(栈空)→a入→b入→c入,最终栈就是[a,b,c],d已出,完全吻合。这就是正确答案。

同考点真题

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