1. 前缀, 中缀, 后缀表达式
1.1. 前缀表达式(波兰表达式)
1.1.1. 前缀表达式的定义
- 前缀表达式又称波兰式, 前缀表达式的运算符位于操作数之前
- 转换:
表达式(3+4)*5-6
的前缀表达式就是- * + 3 4 5 6
1.1.2. 前缀表达式的求值步骤
- 注意: 扫描的是前缀表达式, 因此扫描前要将原表达式进行转换
- 从右到左扫描表达式
- 遇到数字时, 将数字压入堆栈
- 遇到运算符时, 弹出栈顶的两个数,
用运算符对它们做相应的计算, 并将结果入栈 - 重复上述过程知道表达式最左端,
最后运算得出的值为表达式的结果
1.1.3. 前缀表达式的计算示例
表达式
(3+4)*5-6
转换成前缀表达式- * + 3 4 5 6
从右到左扫描前缀表达式, 按顺序将 6 5 4 3 压入栈中
数字全部入栈后, 遇到 "+" 运算符, 栈中 3 和 4 出栈,
并计算3 + 4
的结果, 得到 7 并将其入栈.然后下一个扫到 "*" 运算符, 栈中继续出栈 2 个元素,
并计算7 * 5
的结果, 得到 35 同时将其入栈.最后扫到 "-" 运算符, 计算出
35 - 6
的结果,
将 29 压入栈中, 得出最后结果, 并输出.
1.2. 中缀表达式
1.2.1. 中缀表达式的定义
- 中缀表达式就是常见的运算表达式, 如表达式
(3+4)*5-6
- 中缀表达式求值对于人类来说是最合理的, 但对于计算机并不好操作.
- 在计算机中进行计算时, 通常都会将中缀表达式转换成其他表达式来操作,
一般来说都是转换成后缀表达式.
1.3. 后缀表达式
1.3.1. 后缀表达式的定义
后缀表达式又称逆波兰表达式, 与前缀表达式类似, 只是运算符位于操作数之后
举例说明:
表达式(3+4)*5-6
对应的后缀表达式是3 4 + 5 * 6 -
更多的例子:
正常的表达式 | 逆波兰表达式 |
---|---|
a + b | a b + |
a + (b - c) | a b c - + |
a + (b - c) * d | a b c - d * + |
a + d * (b - c) | a d b c - * + |
a = 1 + 3 | a 1 3 + = |
1.3.2. 后缀表达式计算流程
- 注意: 同样需要将中缀表达式转换后缀表达式后操作
- 从左到右扫描表达式
- 遇到数字时, 将数字压入堆栈
- 遇到运算符时, 弹出栈顶的两个数,
用运算符对它们做计算, 并将结果入栈. - 重复上述过程直到表达式最右端,
最后得到的运算结果就是表达式的最终结果.
1.3.3. 后缀表达式计算实例
- 表达式
(3+4)*5-6
转换成后缀表达式3 4 + 5 * 6 -
- 从左到右进行扫描, 将 3 4 压入栈中
- 遇到 "+" 运算符, 因此弹出 4 和 3,
并计算3 + 4
的值, 得到结果为 7 同时将其压入栈 - 将 5 进行入栈
- 然后遇到 "*" 运算符, 因此出栈 7 和 5,
计算7 * 5
得到结果为 35 并将其入栈 - 将 6 进行入栈
- 最后是 "-" 运算符, 计算出
35 - 6
的值,
得到最终结果 29, 并将其入栈.