📅  最后修改于: 2023-12-03 15:39:14.578000             🧑  作者: Mango
中缀表达式是一种常见的数学表达方式,但是在计算机中,前缀表达式和后缀表达式通常更容易处理。因此,我们需要将中缀表达式转换为前缀表达式,以便更好地进行计算。
中缀表达式通常使用操作符位于两个操作数中间的方式来表示计算,例如:
5 + 6 * 7 - 8
前缀表达式(也称为波兰式)将操作符位于两个操作数之前,例如:
- + 5 * 6 7 8
我们将使用以下规则将中缀表达式转换为前缀表达式:
以下是一个示例,说明如何将中缀表达式 5 + 6 * 7 - 8
转换为前缀表达式:
8 - 7 * 6 + 5
5 + 6 * 7 - 8
5 6 7 * + 8 -
- + * 6 7 5 8
因此,原始的中缀表达式 5 + 6 * 7 - 8
将转换为前缀表达式 - + * 6 7 5 8
。
以下是一个简单的 Python 实现:
def infix_to_prefix(expr):
# 将中缀表达式反转
expr = expr[::-1]
# 创建操作符优先级字典
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
# 创建栈
stack = []
# 创建输出字符串
output = ''
for char in expr:
if char.isdigit():
# 数字直接添加到输出字符串
output += char
elif char == '(':
# 左括号入栈
stack.append(char)
elif char == ')':
# 弹出栈中的操作符,直到左括号
while stack and stack[-1] != '(':
output += stack.pop()
# 弹出左括号
stack.pop()
else:
# 操作符
while stack and stack[-1] != '(' and precedence[char] <= precedence[stack[-1]]:
# 弹出优先级高的操作符
output += stack.pop()
# 将操作符入栈
stack.append(char)
# 将栈中的所有操作符弹出
while stack:
output += stack.pop()
# 反转输出字符串
output = output[::-1]
return output
以上代码将中缀表达式转换为后缀表达式,并反转后缀表达式以获得前缀表达式。
将中缀表达式转换为前缀表达式可以简化算法中的计算过程,并且对于某些计算机语言也更容易处理。使用以上规则和 Python 实现,可以将中缀表达式轻松转换为前缀表达式。