Skip to content

2024年 408 数据结构 第 2 题

数据结构2024年选择题2分

题目

表达式 x+y*(z-u)/v 的等价后缀是( )

错因

B

*/ 的执行顺序搞反了。原表达式 y*(z-u)/v 中,*/ 同优先级、左结合:先算 y*(z-u) 再除以 v。所以后缀里应该是先 */,即 ...*v/;选 B 写成 ...v/* 等于让 / 先于 * 完成,把 v 直接除到了 (z-u) 上,含义变成 y * ((z-u)/v),运算次序错了。

C

写成了前缀(波兰式)而不是后缀(逆波兰式)。后缀的特征是"运算符跟在两个操作数之后",前缀则是"运算符在前"。+x/*y-zuv 这种"运算符全部在最前"的形式正是前缀。题目问的是后缀,看错题了。

D

同样把后缀做成了前缀。+x*y/-zuv 中所有运算符都在操作数之前,是前缀表达式。把求 +/*///- 在表达式里的位置(中缀靠中间)和后缀里的位置(在两操作数之后)混淆,反而退到了前缀位置。

总解析

中缀转后缀的标准思路:操作数顺序不变,运算符按"优先级 + 左结合"的执行顺序,依次跟在它们的两个操作数后面

把原式按运算优先级显式补上括号:

从最内层开始转换:

步骤中缀片段后缀片段
1z - uzu-
2y * (z - u)yzu-*
3(y*(z-u)) / vyzu-*v/
4x + ...xyzu-*v/+

每一步只是把当前层级的运算符挪到它两个子表达式的后面,操作数 x, y, z, u, v 自始至终维持原顺序。

最终答案是 A(xyzu-*v/+)

最后更新:

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

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