中缀转后缀代码
时间: 2023-08-06 17:26:55 浏览: 48
中缀表达式转后缀表达式的代码如下(使用栈实现):
```python
def infix_to_postfix(expression):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
stack = []
postfix = []
for token in expression:
if token.isdigit() or token.isalpha():
postfix.append(token)
elif token == '(':
stack.append(token)
elif token == ')':
while stack and stack[-1] != '(':
postfix.append(stack.pop())
stack.pop() # remove '('
else:
while stack and stack[-1] != '(' and precedence[token] <= precedence[stack[-1]]:
postfix.append(stack.pop())
stack.append(token)
while stack:
postfix.append(stack.pop())
return postfix
```
其中,`precedence` 字典定义了运算符的优先级,`stack` 是操作数栈,`postfix` 是后缀表达式的列表。遍历中缀表达式,根据当前处理的符号进行如下操作:
- 如果是操作数,直接加入后缀表达式;
- 如果是左括号,加入栈中;
- 如果是右括号,将栈中的元素弹出,直到左括号,依次加入后缀表达式;
- 如果是运算符,弹出栈中优先级不低于当前运算符的元素,依次加入后缀表达式,再将当前运算符加入栈中;
- 最后,将栈中所有元素依次加入后缀表达式即可。
例如,对于中缀表达式 `a+b*c-(d/e+f)*g`,运行 `infix_to_postfix` 函数后得到的后缀表达式为 `abc*+de/f+g*-`。