给定一个空栈,执行以下操作序列:
操作序列:push(1),push(2),push(3),pop(),pop(),push(4),push(5),pop()
最终栈中的元素是( )。
排列组合问题:先判断是否考虑顺序(排列P vs 组合C),再确定是否允许重复。乘法原理分步,加法原理分类。
区分排列(考虑顺序,$P(n,m)$)和组合(不考虑顺序,$C(n,m)$)。注意特殊元素优先处理、正难则反等计数技巧。
【考点】栈(Stack)|LIFO原则|数据结构模拟
🎯 考纲定位 本题考查【GESP C++ 六级】数据结构模块的栈(Stack)特性。命题人专攻"栈操作顺序"这一基础概念,卡住大量考生对LIFO(后进先出)原则的模糊认知——他们往往凭直觉判断"最后push的元素"一定在栈顶,却忽略了pop操作会改变栈顶元素。
🧠 解题思维 先模拟:push(1,2,3)后栈为[1,2,3],两次pop弹出3和2,栈剩[1];再push(4,5)得[1,4,5],最后pop弹出5,栈为[1,4]。核心观察点是"pop操作总是移除栈顶元素",所以最终栈顶必然是最后一次push的元素被移除前的状态。
🪤 陷阱拆解 A项(1,2)是忘了push(4,5)的"漏操作"陷阱,B项(1,4,5)是忘了最后pop的"少一步"陷阱,C项(1,2,5)是混淆push与pop顺序的"栈顶误判"陷阱——以为pop会移除push(4)而非push(5)。
🔄 反命题思维 若把最后pop换成push(6),答案变[1,4,6];若把push(4)换成pop(),栈空——这类变形题常考。刷到栈题,先问自己"如果多一个pop