如何由中缀表达式转为后缀
时间: 2023-07-18 18:51:33 浏览: 91
C++中缀表达式转后缀表达式的方法
5星 · 资源好评率100%
将中缀表达式转换为后缀表达式的过程可以使用栈来实现。具体步骤如下:
1. 初始化两个栈:运算符栈和后缀表达式栈。
2. 从左到右扫描中缀表达式的每个元素。
3. 如果当前元素是操作数,将其压入后缀表达式栈。
4. 如果当前元素是运算符,进行如下操作:
a. 如果当前运算符的优先级小于或等于运算符栈顶的运算符优先级,弹出运算符栈顶的运算符压入后缀表达式栈,重复该操作,直到当前运算符的优先级大于运算符栈顶的运算符优先级或者运算符栈为空。
b. 将当前运算符压入运算符栈。
5. 如果当前元素是左括号,将其压入运算符栈。
6. 如果当前元素是右括号,进行如下操作:
a. 重复弹出运算符栈顶的运算符并压入后缀表达式栈,直到遇到左括号。
b. 弹出左括号,但不将其压入后缀表达式栈。
7. 重复步骤2-6,直到中缀表达式的所有元素都被扫描完毕。
8. 如果运算符栈中还有运算符,依次弹出运算符并压入后缀表达式栈。
9. 后缀表达式栈中的元素就是转换后的后缀表达式。
例如,将中缀表达式 3 + 4 * 2 / ( 1 - 5 ) 转换为后缀表达式的过程如下:
| 中缀表达式 | 运算符栈 | 后缀表达式栈 |
| :--------: | :------: | :-----------: |
| 3 | | 3 |
| + | + | 3 |
| 4 | + | 3 4 |
| * | +* | 3 4 |
| 2 | +* | 3 4 2 |
| / | +/* | 3 4 2 |
| ( | +/*( | 3 4 2 |
| 1 | +/*( | 3 4 2 1 |
| - | +/*(- | 3 4 2 1 |
| 5 | +/*(- | 3 4 2 1 5 |
| ) | +/* | 3 4 2 1 5 - / + |
因此,中缀表达式 3 + 4 * 2 / ( 1 - 5 ) 转换为后缀表达式为 3 4 2 * 1 5 - / +。
阅读全文