按从左到右顺序,用栈计算后缀表达式“6 2 3 + - 3 8 2 / + *”。假设除法按通常算术处理,该表达式的结果为()。
数字依次入栈,遇到运算符就弹出两个操作数计算。2 3 + 得 5,随后 6 5 - 得 1;8 2 / 得 4,随后 3 4 + 得 7;最后 1 7 * 得 7。
选项分析
错误。通常是把减法两个操作数的顺序颠倒,算成了 5-6。
正确。两部分分别得到 1 和 7,最后相乘为 7。
错误。没有按照每个运算符出现的位置及时出栈计算。
错误。可能只计算了部分加法和乘法,遗漏了前面的减法结构。
本题为什么容易错
栈的弹出顺序和表达式中的左右顺序相反。对加法、乘法看不出问题,一到减法和除法就会暴露。做题时应明确写成“右操作数=第一次出栈,左操作数=第二次出栈”。
简短答案
后缀表达式怎样用栈计算结果,正确答案是 B(7)。数字依次入栈,遇到运算符就弹出两个操作数计算。2 3 + 得 5,随后 6 5 - 得 1;8 2 / 得 4,随后 3 4 + 得 7;最后 1 7 * 得 7。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| -7 | 本题干扰项 | 错误。通常是把减法两个操作数的顺序颠倒,算成了 5-6。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 7 | 本题正确答案 | 正确。两部分分别得到 1 和 7,最后相乘为 7。 | 看到题干核心场景时优先联想到它 |
| 21 | 本题干扰项 | 错误。没有按照每个运算符出现的位置及时出栈计算。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 35 | 本题干扰项 | 错误。可能只计算了部分加法和乘法,遗漏了前面的减法结构。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- -7:错误。通常是把减法两个操作数的顺序颠倒,算成了 5-6。
- 21:错误。没有按照每个运算符出现的位置及时出栈计算。
- 35:错误。可能只计算了部分加法和乘法,遗漏了前面的减法结构。
知识点详解
后缀表达式又称逆波兰表达式,运算符写在操作数之后,因此不需要括号也能唯一确定计算顺序。求值时从左到右扫描:数字入栈;遇到二元运算符,先弹出的值作为右操作数,后弹出的值作为左操作数,计算结果再压回栈中。扫描结束后,合法表达式的栈中应只剩一个结果。中缀转后缀则是另一类问题,通常还需要一个运算符栈处理优先级和括号。
备考速记
速记:数字进栈,符号算账;先出的是右边,后出的是左边。
数据结构在数据结构场景中的作用
数据结构在本题中的核心价值,是解决“按从左到右顺序,用栈计算后缀表达式“6 2 3 + - 3 8 2 / + *”。假设除法按通常算术处理,该表达式的结果为()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 直接给出后缀表达式,要求计算最终结果。
- 给出中缀表达式,要求转换为后缀表达式。
- 考查表达式求值使用的数据结构,以及运算符栈和操作数栈的职责。
数据结构在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把数据结构放到数据结构场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
老师通常会要求把栈写在草稿纸上,不要在脑中跳步。这里真正容易错的是减法:遇到“-”时,先弹出 5,它是右操作数;再弹出 6,它是左操作数,所以算 6-5,而不是 5-6。除法同理。
考点定位
后缀表达式求值的核心是操作数入栈、运算符弹出两个数,并严格区分先弹出的右操作数和后弹出的左操作数。
易错提醒
- 遇到运算符后只弹出一个操作数。
- 减法和除法把左右操作数写反。
- 把后缀表达式当作中缀表达式,擅自按照乘除优先级重新排序。
备考提示
- 后缀表达式本身已经确定运算顺序,不需要括号和优先级规则。
- 练习时把每一步栈内容写出来,连续做三到五题后再追求口算速度。
你可能还想了解
- 后缀表达式为什么不需要括号?
- 后缀表达式遇到减法时操作数顺序怎么确定?
- 中缀表达式怎样转换为后缀表达式?
- 表达式求值为什么适合使用栈?
本文小结
扫描后缀表达式时,数字入栈,运算符弹出两个操作数。先弹出的是右操作数,后弹出的是左操作数。本题依次算出 1 和 7,最后相乘得到 7。