如何将中缀式转换成后缀式
时间: 2024-05-23 10:11:38 浏览: 140
将中缀表达式转化为后缀表达式
将中缀表达式转换为后缀表达式的一种常用方法是使用逆波兰表示法(RPN)。以下是将中缀表达式转换为后缀表达式的步骤:
1. 创建一个空的栈和一个空的后缀表达式列表。
2. 从左到右扫描中缀表达式。
3. 如果当前令牌是操作数,则将其添加到后缀表达式列表中。
4. 如果当前令牌是左括号,则将其压入栈中。
5. 如果当前令牌是右括号,则弹出栈中的所有运算符,将它们添加到后缀表达式列表中,直到遇到左括号为止。然后弹出左括号并将其丢弃。
6. 如果当前令牌是运算符,则将其压入栈中。但在这样做之前,将与栈顶运算符的优先级进行比较。如果栈顶运算符具有更高或相等的优先级,则弹出栈顶运算符并将其添加到后缀表达式列表中。重复此步骤,直到栈顶运算符优先级低于当前令牌为止。
7. 当扫描完整个中缀表达式后,如果栈中仍有运算符,则将它们依次弹出并添加到后缀表达式列表中。
8. 后缀表达式列表就是转换后的后缀表达式。
以下是一个示例,演示如何将中缀表达式“3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3”转换为后缀表达式:
中缀表达式: 3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
后缀表达式: 3 4 2 * 1 5 - 2 3 ^ ^ / +
解释:
- 3 添加到后缀表达式列表中。
- + 添加到栈中。
- 4 添加到后缀表达式列表中。
- * 与栈顶运算符 + 进行比较,* 的优先级高,将 * 添加到栈中。
- 2 添加到后缀表达式列表中。
- / 与栈顶运算符 * 的优先级相等,将 / 添加到栈中。
- ( 添加到栈中。
- 1 添加到后缀表达式列表中。
- - 与栈顶运算符 ( 的优先级相等,将 - 添加到栈中。
- 5 添加到后缀表达式列表中。
- ) 弹出栈中的所有运算符,将它们添加到后缀表达式列表中,直到遇到左括号为止。添加的运算符依次为 - 和 /。
- ^ 与栈顶运算符 / 的优先级相等,将 ^ 添加到栈中。
- 2 添加到后缀表达式列表中。
- ^ 与栈顶运算符 ^ 的优先级相等,将 ^ 添加到栈中。
- 3 添加到后缀表达式列表中。
- 弹出栈中的所有运算符,将它们添加到后缀表达式列表中。添加的运算符为 ^。
- + 弹出栈中的所有运算符,将它们添加到后缀表达式列表中。添加的运算符依次为 /、* 和 +。
阅读全文