Appearance
题目
设栈 S 和队列 Q 的初始状态均为空,元素 a, b, c, d, e, f, g 依次进入栈 S 。若每个元素出栈后立即进入队列 Q,且 7 个元素出队的顺序是 b, d, c, f, e, a, g,则栈 S 的容量至少是( )。
错因
A
认为每次只要入一个出一个就行,把问题简化成了"最多同时存一个元素"。但出队顺序 b,d,c 中,d 在 c 前面出,说明 d 先于 c 入栈,且 c 入栈时 a 还压在底部,栈内至少同时有 a、c、d 三个元素。
B
模拟到出栈序列 d,c 时,发现需要 a、c、d 同时在栈内,容量应为 3,却只写了 2。通常是追踪到 push c、push d 时就停了,漏算了底部的 a 也占了一层。
D
在某个时刻估算了栈的深度,把 g 单独入栈也算了进去(g 入栈时栈已空,深度为 1),或者把某步的计数多加了 1,误以为最大深度是 4。
总解析
出队顺序即出栈顺序:b, d, c, f, e, a, g。逐步模拟入栈/出栈过程(→表示当前栈内元素,栈顶在右):
- push a → [a]
- push b → [a, b];pop b(输出 b)→ [a]
- push c → [a, c];push d → [a, c, d](栈深 3);pop d(输出 d)→ [a, c]
- pop c(输出 c)→ [a]
- push e → [a, e];push f → [a, e, f](栈深 3);pop f(输出 f)→ [a, e]
- pop e(输出 e)→ [a];pop a(输出 a)→ []
- push g → [g];pop g(输出 g)→ []
整个过程中栈内同时最多有 3 个元素(步骤 3 和步骤 5),所以栈 S 的容量至少是 3,答案 C。