Skip to content

2013年 408 数据结构 第 2 题

数据结构2013年选择题2分

题目

一个栈的入栈序列为1,2,3,⋯,n,其出栈序列是p1,p2,p3,⋯,pn,若p2=3,则p3可能取值的个数是()。

错因

A

误以为 三个位置必须各不相同,所以" 不能等于 这三个特定值",于是答 。但其实 不固定(既可能是 1,也可能是 2,还可能是 4), 可以取的值远不止"排除 1,2,3"那么少。真正不可能的只有 这一个(3 已经被 出过了)。

B

只考虑了""和" 某个特定值"两个限制,答 。漏掉了:实际上只有 一种情况被排除,其余 个值都能通过适当的入出栈操作做到。

D

觉得" 没说清楚,栈的状态不固定,没法计数"。但栈题的标准做法就是枚举 的所有合法情况,每种情况下推出 的可行集合,再求并集——题面信息已经够定一个具体的数。

总解析

核心观察:3 已经在 出过,所以 必然。剩下需要证明 每个值都可达,那答案就是

枚举 的合法取值 的前提下):

情况入出栈过程 之后栈中元素 可取
11入1出1,入2,入3出3;或入 ,得
22入1,入2出2,入3出3;或入 ,得
34入1,2,3,4出4,出3(栈顶 2);或入 ,得

为什么 不能 ?想让 ,必须在出 栈顶就是 3。若 ,那么 3 入栈后又入了 ,出 后栈顶是 ,违反约束。

合并三种情况的可达集

  • :情况 2 ✓
  • :情况 1、3 ✓
  • 不可能(3 已出)
  • :情况 1、2 ✓(情况 3 中 4 已出,不算)
  • ):所有情况都能实现 ✓

所以 的可取值集合 = 唯一被排除的是 3,共 个。

最终答案是 C(n-1)

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数