软件设计师 · 高频练习

后缀表达式怎样用栈计算结果?

中级 单选题 第 823 题 中等 软件设计师后缀表达式表达式求值数据结构
题目

按从左到右顺序,用栈计算后缀表达式“6 2 3 + - 3 8 2 / + *”。假设除法按通常算术处理,该表达式的结果为()。

A -7
B 7
C 21
D 35
题目类型:原创高频练习题 用途:用于帮助理解软件设计师相关考点和答案解析,不等同于官方真题。
正确答案
B
答案解析

数字依次入栈,遇到运算符就弹出两个操作数计算。2 3 + 得 5,随后 6 5 - 得 1;8 2 / 得 4,随后 3 4 + 得 7;最后 1 7 * 得 7。

选项分析

A

错误。通常是把减法两个操作数的顺序颠倒,算成了 5-6。

B

正确。两部分分别得到 1 和 7,最后相乘为 7。

C

错误。没有按照每个运算符出现的位置及时出栈计算。

D

错误。可能只计算了部分加法和乘法,遗漏了前面的减法结构。

本题为什么容易错

栈的弹出顺序和表达式中的左右顺序相反。对加法、乘法看不出问题,一到减法和除法就会暴露。做题时应明确写成“右操作数=第一次出栈,左操作数=第二次出栈”。

先看结论

简短答案

后缀表达式怎样用栈计算结果,正确答案是 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。