题目
【单选题】设栈 s 和队列 q 均为空,先将 a , b , c , d 依次进队列 q ,再将队列 q 中顺次出队的元素进栈 s ,直至队空。再将栈 s 中的元素逐个出栈,并将出栈元素顺次进队列 q ,则队列 q 的状态是 。A. abcdB. dcbaC. bcadD. dbca
【单选题】设栈 s 和队列 q 均为空,先将 a , b , c , d 依次进队列 q ,再将队列 q 中顺次出队的元素进栈 s ,直至队空。再将栈 s 中的元素逐个出栈,并将出栈元素顺次进队列 q ,则队列 q 的状态是 。
A. abcd
B. dcba
C. bcad
D. dbca
题目解答
答案
B. dcba
解析
考查要点:本题主要考查队列和栈的基本操作,以及两者结合使用时元素的进出顺序。
解题核心思路:
- 队列是先进先出(FIFO),元素按顺序出队后依次压入栈中。
- 栈是先进后出(FILO),压入栈的元素顺序与出栈顺序相反。
- 最终将栈中元素依次出栈并重新入队,需注意两次操作对元素顺序的双重反转。
破题关键点:
- 第一次操作中,队列元素按顺序出队并压栈,栈内元素顺序与原队列相同。
- 第二次操作中,栈元素按逆序出栈并入队,最终队列顺序为原队列的逆序。
操作步骤分解
1. 元素入队列q
初始队列q为空,依次入队a、b、c、d,队列状态为:
$q = [a \rightarrow b \rightarrow c \rightarrow d]$
2. 队列元素出队并压栈s
- 出队顺序:a → b → c → d(FIFO)。
- 压栈顺序:a → b → c → d(栈顶最终为d)。
此时栈s状态为:
$s = [\text{栈底} \, a \, \text{←} \, b \, \text{←} \, c \, \text{←} \, d \, \text{栈顶}]$
3. 栈元素出栈并重新入队列q
- 出栈顺序:d → c → b → a(FILO)。
- 入队顺序:d → c → b → a(FIFO)。
最终队列q状态为:
$q = [d \rightarrow c \rightarrow b \rightarrow a]$