精易论坛

标题: 算术表达式的计算-中缀表达式转后缀表达式 [打印本页]

作者: 屎加豆    时间: 2022-9-16 15:40
标题: 算术表达式的计算-中缀表达式转后缀表达式

在很多年前,试过用代码实现算术表达式的计算,但是因为当时知识储备不足,所以不了了之。
直到现在,学到的知识储备已经能够支撑我实现当年未实现的代码。
(其实就是中缀表达式转后缀表达式的实现)

下面是大致的实现过程

1、把算术表达式,转换城后缀表达式。

转换过程:

先定义一个数组和一个栈变量

1:遍历表达式,遇到数字的话直接加入到,后缀表达式数组里。
2:遇到运算符和(,则先加入到运算符栈里。加入的规则是,运算符优先级高于栈定运算符时,直接加入。优先级低于时,则先把栈顶运算符移到后缀表达式数组里,直到加入运算符优先级高于栈顶运算符优先级后再加入到运算符栈里。如果遇到 )时,则把()内的全部运算符先移到后缀表达式数组里。

2、遍历后缀表达式数组,进行计算。

例子:12 + ((2 + 5 * 2) - 10)/ 2
后缀表达式: 12 2 5 2 * + 10 - 2 / +

计算过程如下:

12 2 5 2 * + 10 - 2 / +

5 * 2 = 10    >>> 12 2 10 + 10 - 2 / +
2 + 10 = 12    >>> 12 12 10 - 2 / +
12 - 10 = 2    >>> 12 2 2 / +
2 / 2 = 1    >>> 12 1 +
12 + 1 = 13

计算结果为:13

表达式计算.e (17.05 KB, 下载次数: 41)


作者: 不苦小和尚    时间: 2022-9-16 19:00
一看就是做了力扣题了
作者: 59hdvj    时间: 2022-9-16 19:04
感谢分享
作者: liangyuhong    时间: 2022-9-16 19:36
逆波兰式
作者: 杰西卡技术传媒    时间: 2022-9-17 08:34
        感谢分享,很给力!~
作者: 治愈勇者    时间: 2022-9-18 12:47
开源精神必须支持~
作者: zhifu3158    时间: 2022-9-20 15:16
#在这里快速回复#开源精神必须支持~
作者: banik79754    时间: 2022-9-21 01:28
学习进步!......
作者: 灵感吖    时间: 2022-9-21 20:01
支持开源~!感谢分享
作者: cfvgbhnj    时间: 2022-9-28 08:07
感谢分享,真好!......
作者: 诸葛不良    时间: 2022-11-8 15:11
正好用到。谢谢




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4