题目详解:
栈 S 的操作遵循后进先出(LIFO)原则,而队列 Q 的操作遵循先进先出(FIFO)原则。题目中元素 a,b,c,d,e,f,g 依次进入栈 S,每个元素出栈后立即进入队列 Q,最终队列 Q 的出队顺序为 b,d,c,f,e,a,g。我们需要根据这一顺序推断栈 S 的容量至少是多少。
- 初始状态:栈 S 和队列 Q 均为空。
- 元素依次入栈 S 的顺序为 a,b,c,d,e,f,g。
- 出栈顺序即为队列 Q 的入队顺序,最终队列 Q 的出队顺序为 b,d,c,f,e,a,g。
根据队列的FIFO特性,队列 Q 的出队顺序即为入队顺序,因此栈 S 的出栈顺序也是 b,d,c,f,e,a,g。我们需要模拟栈 S 的入栈和出栈过程,并记录栈的最大深度。
具体步骤如下:
- 入栈 a,栈内容:[a],当前深度:1。
- 入栈 b,栈内容:[a,b],当前深度:2。
- 出栈 b 并进入队列 Q,栈内容:[a],当前深度:1。
- 入栈 c,栈内容:[a,c],当前深度:2。
- 入栈 d,栈内容:[a,c,d],当前深度:3。
- 出栈 d 并进入队列 Q,栈内容:[a,c],当前深度:2。
- 出栈 c 并进入队列 Q,栈内容:[a],当前深度:1。
- 入栈 e,栈内容:[a,e],当前深度:2。
- 入栈 f,栈内容:[a,e,f],当前深度:3。
- 出栈 f 并进入队列 Q,栈内容:[a,e],当前深度:2。
- 出栈 e 并进入队列 Q,栈内容:[a],当前深度:1。
- 出栈 a 并进入队列 Q,栈内容:[],当前深度:0。
- 入栈 g,栈内容:[g],当前深度:1。
- 出栈 g 并进入队列 Q,栈内容:[],当前深度:0。
在上述过程中,栈 S 的最大深度为 3(例如在入栈 d 和 f 时)。因此,栈 S 的容量至少需要 3 才能满足操作需求。
正确答案:C