后缀表达式的求值的算法
来源:互联网 发布:ip网络计算 编辑:程序博客网 时间:2024/06/05 11:57
1 后缀表达式的求值
将中缀表达式转换成等价的后缀表达式后,求值时,不需要再考虑运算符的优先级,只需从左到右扫描一遍后缀表达式即可。具体求值步骤为:从左到右扫描后缀表 达式,遇到运算符就把表达式中该运算符前面两个操作数取出并运算,然后把结果带回后缀表达式;继续扫描直到后缀表达式最后一个表达式。
例如,后缀表达式(abc*+def*/-) 的求值
2 后缀表达式的求值的算法
设置一个栈,开始时,栈为空,然后从左到右扫描后缀表达式,若遇操作数,则进栈;若遇运算符,则从栈中退出两个元素,先退出的放到运算符的右边,后退出的 放到运算符左边,运算后的结果再进栈,直到后缀表达式扫描完毕。此时,栈中仅有一个元素,即为运算的结果。
例,求后缀表达式:1 2 + 8 2 - 7 4 - / * 的值,
栈的变化情如下:
步骤
栈中元素
说明
1
1
1 进栈
2
12
2 进栈
3
遇+ 号退栈2 和1
4
3
1+2=3 的结果3 进栈
5
38
8 进栈
6
382
2 进栈
7
3
遇- 号退栈2 和8
8
36
8-2=6 的结果6 进栈
9
367
7 进栈
10
3674
4 进栈
11
36
遇- 号退栈4 和7
12
36
7-4=3 的结果3 进栈
13
3
遇/ 号退栈3 和6
14
32
6/3=2 的结果2 进栈
15
遇* 号退栈2 和3
16
6
3*2=6 进栈
17
6
扫描完毕,运算结束
从上可知,最后求得的后缀表达式之值为6 ,与用中缀表达式求得的结果一致,但后缀式求值要简单得多。
五、中缀表达式变成等价的后缀表达式的算法
将中缀表达式变成等价的后缀表达式,表达式中操作数次序不变,运算符次序发生变化,同时去掉了圆括号。转换规则是:设立一个栈,存放运算符,首先栈为空, 编译程序从左到右扫描中缀表达式,若遇到操作数,直接输出,并输出一个空格作为两个操作数的分隔符;若遇到运算符,则必须与栈顶比较,运算符级别比栈顶级 别高则进栈,否则退出栈顶元素并输出,然后输出一个空格作分隔符;若遇到左括号,进栈;若遇到右括号,则一直退栈输出,直到退到左括号止。当栈变成空时, 输出的结果即为后缀表达式。将中缀表达式(1+2)*((8-2)/(7-4)) 变成等价的后缀表达式。
现在用栈来实现该运算,栈的变化及输出结果如下:
步骤
栈中元素
输出结果
说明
1
(
( 进栈
2
(
1
输出1
3
(+
1
+ 进栈
4
(+
1 2
输出2
5
1 2 +
+ 退栈输出,退栈到( 止
6
*
1 2 +
* 进栈
7
*(
1 2 +
( 进栈
8
*((
1 2 +
( 进栈
9
*((
1 2 + 8
输出8
10
*((-
1 2 + 8
输出2
11
*((-
1 2 + 8 2
- 进栈
12
*(
1 2 + 8 2 -
- 退栈输出,退栈到( 止
13
*(/
1 2 + 8 2 -
/ 进栈
14
*(/(
1 2 + 8 2 -
( 进栈
15
*(/(
1 2 + 8 2 - 7
输出7
16
*(/(-
1 2 + 8 2 - 7
- 进栈
17
*(/(-
1 2 + 8 2 - 7 4
输出4
18
*(-
1 2 + 8 2 - 7 4 -
- 退栈输出,退栈到( 止
19
*
1 2 + 8 2 - 7 4 - /
/ 退栈输出,退栈到( 止
20
1 2 + 8 2 - 7 4 - / *
* 退栈并输出
- 后缀表达式的求值的算法
- 后缀表达式的求值的算法
- 后缀表达式的求值的算法
- 后缀表达式的求值的算法
- 后缀表达式的求值的算法
- 后缀表达式的求值的算法
- 后缀表达式求值的算法实现
- 后缀表达式的求值
- 后缀表达式的运算求值
- 用栈对后缀表达式求值的算法(五种)
- 中缀表达式转后缀,以及后缀表达式的求值
- 后缀表达式求值的步骤描述
- 用栈解决后缀表达式的求值
- 栈的应用-后缀表达式运算求值
- 蓝桥杯 算法训练 表达式的计算(中缀转后缀表达式求值)
- 表达式求值算法的实现
- 表达式求值的经典算法
- 前缀,中缀,后缀表达式的转换,表达式的求值
- Java LinkedHashSet
- OpenCV 图像分离颜色通道 split函数和mege函数的运用
- 【Codeforces-402D】-String Game (二分)
- sql server导出excel步骤
- 安装Hive On Spark 遇见的问题
- 后缀表达式的求值的算法
- [C++]什么是句柄?为什么会有句柄?
- LeetCode
- 11-12 标准IO之feof,ferror,clearerr
- 9. Palindrome Number
- 解决 Windows instance 时间不同步问题
- 漫步数学分析二十三——级数的积分与微分
- 第一个使用Spring Tool Suite(STS)和Maven建立的Spring mvc 项目
- 我所理解的Java到底是解释型语言还是编译型语言