Appearance
题目
对空栈 进行 Push 和 Pop 操作,入栈序列为 ,经过 Push, Push, Pop, Push, Pop, Push, Push, Pop 操作后,得到的出栈序列是( )。
错因
A
第二次 Pop 时输出了 、第三次 Pop 时输出了 。错在没意识到第二次 Push 进的是 (栈顶是 不是 ),把 Push 序号和 Pop 序号对错了——这种错误常见于"懒得画栈状态"。
B
第二次 Pop 错输出 。原因和 A 类似:忽略了第一次 Pop 之后栈里仍剩 ,再次 Push 进的是 ,所以第二次 Pop 应输出 而不是 。把 Pop 当成"清空栈"是典型误区。
C
正确处理了前两次 Pop(输出 、),但最后一次 Pop 错输出了 。错在没数清入栈序列:题目共 5 次 Push( 全部入过栈),最后栈顶是 ,应输出 。一旦操作步数多就容易丢入栈进度。
总解析
思路:按操作序列逐步模拟栈的状态。Push 把入栈序列里的下一个字母入栈,Pop 弹出栈顶并记入输出。
逐步模拟(共 5 次 Push、3 次 Pop,正好与入栈序列 匹配):
| 步 | 操作 | 入栈/出栈元素 | 操作后栈(栈底→栈顶) | 输出 |
|---|---|---|---|---|
| 1 | Push | — | ||
| 2 | Push | — | ||
| 3 | Pop | |||
| 4 | Push | — | ||
| 5 | Pop | |||
| 6 | Push | |||
| 7 | Push | |||
| 8 | Pop |
关键观察:
- 第二次 Pop 时栈顶是 (不是 , 在栈底)。
- 第三次 Pop 时栈顶是 (、 都没出来)。
输出序列:。
最终答案是 D(b, c, e)。