CSP-J 入门级 · CSP 2025 入门级第一轮 第 15 题

选择题 · 答案 A · 考点:栈(stack)、队列(queue)

← 整套速查表 CSP-J 入门级 全部真题

题目

给定一个初始为空的整数栈 $S$ 和一个空的队列 $P$。我们按顺序处理输入的整数队列 $A: 7, 5, 8, 3, 1, 4, 2$。对于队列 $A$ 中的每一个数,执行以下规则:如果该数是奇数,则将其压入栈 $S$;如果该数是偶数,且栈 $S$ 非空,则弹出一个栈顶元素,并加入到队列 $P$ 的末尾;如果该数是偶数,且栈 $S$ 为空,则不进行任何操作。当队列 $A$ 中的所有数都处理完毕后,队列 $P$ 的内容是什么?

答案:A

考点

栈(stack) 讲解 →栈(stack) 真题汇总 →队列(queue) 讲解 →队列(queue) 真题汇总 →

解题思维

这题考查栈与队列的模拟操作。拿到题先别急着写代码,把输入序列和规则对应起来:奇数直接入栈,偶数看栈非空就弹栈顶入队,栈空则跳过。按顺序一步步走,栈的变化和出队顺序自然就出来了。

常见错误

学生最容易把栈当成队列用,弹出时误拿栈底元素,比如S=[7,5]时弹成7,导致结果变成7,5,3而错选B。还有人会忽略“栈空时偶数不操作”这条规则,强行弹栈或跳过偶数,导致队列长度不对。此外,最后栈里剩下的7不会进队,有人会把它算进去变成D选项。

详细解析(节选)

这道题考查的是栈(Stack)和队列(Queue)两种基本数据结构在模拟过程中的配合使用,属于入门级必会内容。命题人喜欢用这种“一边入栈、一边根据条件弹栈入队”的混合操作来挖坑,核心在于你是否真正理解了栈的后进先出(LIFO)特性以及队列的先进先出(FIFO)特性。拿到题,首先要明确规则:遇到奇数直接压入栈顶;遇到偶数时,若栈非空则弹出栈顶元素加入队列末尾,若栈空则什么都不做。处理完整个输入序列后,队列里的元素顺序就是答案。

现在按顺序模拟一遍。输入序列是7,5,8,3,1,4,2。初始时栈S为空,队列P为空。处理7,是奇数,直接入栈,S=[7]。处理5,也是奇数,继续入栈,S=[7,5](右边是栈顶)。处理8,是偶数且栈非空,弹出栈顶5加入队列,P=[5],栈剩下S=[7]。处理3,奇数,入栈,S=[7,3]。处理1,奇数,入栈,S=[7,3,1]。处理4,偶数且栈非空,弹出栈顶1加入队列,P=[5,1],栈变为S=[7,3]。处理2,偶数且栈非空,弹出栈顶3加入队列,P=[5,1,3],栈剩下S=[7]。至此所有输入处理完毕,栈里还留着7,但它永远不会进队,因为规则只针对输入序列中的偶数操作,栈里剩余元素不会自动出队。

最终队列P的内容是5,1,3,对应选项A。这里要特别强调几个易错点:第一,栈弹出的是栈顶,不是栈底,所以S=[7,5]时弹的是5不是7;第二,每次遇到偶数只弹一个元素,不会清空栈;第三,栈为空时遇到偶数要跳过,不能强行弹栈;第四,最后栈里剩下的元素不计入结果。这些坑在考试里经常用来区分真正理解栈的学生和只会背口诀的学生。

从考频数据看,栈是题库中高频考点,共考过89题,覆盖从2007到2026年的所有年份,其中2024年考了25题,2025年考了15题,2026年已考9题,呈现逐年上升趋势;队列考了46题,2024年12题、2025年13题、2026年9题,同样热度很高。这类“栈+队列混合模拟”的题型在GESP六级、CSP入门级和NOIP普及组初赛中出现频率较高,未来两年大概率仍会保持这一热度,命题形式可能继续以单选题为主,也可能出现需要手写模拟过程的填空题或编程题,但核心逻辑不变:按规则一步步走,抓住栈顶和队列尾这两个关键位置。因此,复习时务必把栈的LIFO和队列的FIFO特性刻进脑子里,遇到混合操作题先画图模拟,再下笔。

同考点真题

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