中缀表达式转前缀表达式代码
时间: 2024-11-19 19:13:46 浏览: 42
中缀表达式转换成前缀表达式,也称为逆波兰表示法(Reverse Polish Notation,RPN),是一种常见的算法问题,通常通过栈的数据结构来解决。以下是基本的步骤:
1. 遍历输入的中缀表达式的每个字符。
2. 如果遇到运算符,将它压入栈中,因为操作数应该先于操作符。
3. 如果遇到左括号,也压入栈,因为它可能需要与后续的右括号匹配。
4. 如果遇到数字,将其转换成字符串并压入栈,直到遇到下一个运算符或右括号。
5. 当遇到右括号时,弹出栈顶的元素(可能是左括号或操作符),直到遇到左括号为止。这个过程形成一个子表达式,并从当前位置开始继续处理剩余的中缀表达式。
6. 最后,当遍历完所有字符后,栈里剩下的就是前缀表达式的各个部分。
这里是一个简单的Python代码示例:
```python
def infix_to_prefix(expression):
operators = []
i = 0
while i < len(expression):
if expression[i] in ['+', '-', '*', '/']:
while (operators and operators[-1] != '(' and
precedence(operators[-1]) >= precedence(expression[i])):
yield operators.pop()
operators.append(expression[i])
elif expression[i] == '(':
operators.append(expression[i])
elif expression[i] == ')':
while operators[-1] != '(':
yield operators.pop()
operators.pop() # pop the left parenthesis
else:
yield str(expression[i]) # a number, append it directly
i += 1
while operators:
yield operators.pop()
# A simple function to determine operator precedence
def precedence(op):
if op == '+' or op == '-':
return 1
if op == '*' or op == '/':
return 2
return 0
# Test with an example
infix_expr = "A + B * C"
prefix_expr = "".join(infix_to_prefix(infix_expr))
print("Infix: ", infix_expr)
print("Prefix: ", prefix_expr)
```
阅读全文