使用python写一段能将中缀表达式转换为后缀表达式,使用堆栈实现的代码
时间: 2024-02-27 14:56:01 浏览: 64
好的,以下是使用堆栈实现将中缀表达式转换为后缀表达式的Python代码:
```python
def infix_to_postfix(infix):
# 定义运算符优先级
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
# 定义一个空栈和一个空的后缀表达式列表
stack = []
postfix = []
# 将中缀表达式转换为列表
tokens = infix.split()
for token in tokens:
# 如果token是一个数字或者变量,直接将其添加到后缀表达式列表中
if token.isdigit() or token.isalpha():
postfix.append(token)
# 如果token是左括号,将其压入堆栈
elif token == '(':
stack.append(token)
# 如果token是右括号,将堆栈中的元素弹出并添加到后缀表达式列表中,直到遇到左括号
elif token == ')':
while stack[-1] != '(':
postfix.append(stack.pop())
stack.pop()
# 如果token是运算符,将堆栈中优先级高于或等于该运算符的元素弹出并添加到后缀表达式列表中,
# 直到堆栈为空或者遇到优先级低于该运算符的元素,然后将该运算符压入堆栈
else:
while stack and stack[-1] != '(' and precedence[token] <= precedence.get(stack[-1], 0):
postfix.append(stack.pop())
stack.append(token)
# 将堆栈中剩余的元素弹出并添加到后缀表达式列表中
while stack:
postfix.append(stack.pop())
# 将后缀表达式列表转换为字符串并返回
return ' '.join(postfix)
```
使用示例:
```python
infix = 'a + b * c + (d * e + f) * g'
postfix = infix_to_postfix(infix)
print(postfix) # 输出:a b c * + d e * f + g * +
```
希望对你有帮助!
阅读全文