归纳编程学习的感悟,
记录奋斗路上的点滴,
希望能帮到一样刻苦的你!
如有不足欢迎指正!
共同学习交流!
🌎欢迎各位→点赞 👍+ 收藏⭐ + 留言📝
没人会嘲笑竭尽全力的人!
前言
在计算机科学中,算数表达式的求值是一个经典的问题,尤其是在编译器设计和计算器应用中。中缀表达式,即我们日常所见的数学表达式(如
3 + 4
或(2 + 3) * 4
),虽然直观易懂,但对于计算机来说并不友好,因为它们需要遵循特定的运算优先级规则。因此,将中缀表达式转换为后缀表达式(也称为逆波兰记法或RPN)可以简化计算过程,使计算机能够更有效地进行求值。
后缀表达式简介
后缀表达式的特点是运算符紧跟在其操作数之后,例如,中缀表达式 3 + 4
转换为后缀表达式后成为 3 4 +
。这种格式消除了对运算符优先级的依赖,也不需要使用括号来表示运算的顺序,这使得计算变得更为直接和高效。
中缀到后缀的转换
步骤概述
- 初始化:创建一个空的运算符栈和一个空的数组。
- 遍历输入:逐个检查中缀表达式中的每个字符。
- 如果是操作数,直接将其添加到数组。
- 如果是运算符,根据栈顶运算符的优先级与当前运算符比较:
- 若当前运算符优先级高于栈顶运算符,则将当前运算符压入栈。
- 若当前运算符优先级低于或等于栈顶运算符,从栈中弹出运算符并添加到数组,直到栈顶运算符优先级低于当前运算符,再将当前运算符压入栈。
- 如果是左括号
(
,直接压入栈。 - 如果是右括号
)
,则不断从栈中弹出运算符并添加到数组,直到遇到对应的左括号,然后将这对括号丢弃。
- 处理剩余运算符:当所有字符被处理后,将栈中剩余的运算符依次弹出并添加到数组。
后缀表达式的计算
计算后缀表达式相对直接,主要步骤如下:
- 初始化:创建一个空的数值栈。
- 遍历后缀表达式:逐个检查后缀表达式中的每个元素。
- 如果是操作数,将其压入数值栈。
- 如果是运算符,从数值栈中弹出两个操作数,执行相应的运算,然后将结果压回栈中。
- 最终结果:当所有元素被处理后,数值栈的顶部元素就是整个表达式的计算结果。
示例
假设我们要计算中缀表达式 (3 + 4) * 5
的值,我们首先将其转换为后缀表达式:
- 初始化:
[]
&#