中缀表达式 a*(b+c)-d 的后缀形式是( )。
这题考中缀转后缀(逆波兰式),核心就是栈:先扫左括号进栈,遇到运算符就比栈顶优先级,栈顶优先级高就弹出运算,直到栈顶优先级低或为空再压入当前运算符。
学生最容易把运算符优先级搞反,比如以为乘法比加法低,结果把*先算了;或者左括号进栈后没等右括号就急着弹出,导致顺序全乱;还有人会误把后缀式当成前缀式读,从右往左倒着算,完全跑偏。
考点:中缀表达式转后缀表达式(逆波兰式),本质是运算符优先级与括号匹配。
人话版概念:
a*(b+c)-d,运算符夹在操作数中间,人类好读,机器难算。abc+*d-,运算符紧跟其操作数,机器直接按顺序算,不用括号。命题人怎么挖坑: 1. 把乘法优先级放低,诱导你先算加法。 2. 左括号进栈后,还没遇到右括号就让你弹出,结果把*提前。 3. 后缀式读反(从右往左),选项 D 就是典型陷阱。
拿到题先想什么→一步步推: 1. 从左到右扫描。 2. 遇到字母(操作数):直接输出。 - 输出:a 3. 遇到 *:栈空,直接压栈。 - 栈:[*] 4. 遇到 (:压栈。 - 栈:[* (] 5. 遇到 b:输出 b。 6. 遇到 +:栈顶是 (,括号内运算符自由压栈。 - 栈:[* ( +] 7. 遇到 c:输出 c。 8. 遇到 ):弹出直到左括号,把 + 弹出输出。 - 输出:abc+ - 栈:[*] 9. 遇到 -:栈顶是 *,优先级 * > -,先弹出 * 输出,再压 -。 - 输出:abc+* - 栈:[-] 10. 遇到 d:输出 d。 11. 表达式结束:弹出栈里剩下的 -。 - 输出:abc+*d-
考频与趋势:
预测:
避坑再提醒:
最终答案:abc+*d-(选项 B)。