中缀转为后缀 栈实现
时间: 2023-09-10 11:13:34 浏览: 26
中缀表达式转后缀表达式的思路是:从左到右遍历中缀表达式,遇到数字直接输出,遇到操作符则将其压入栈中,若遇到左括号则将其压入栈中,若遇到右括号则将栈中的操作符依次弹出并输出,直到遇到左括号为止。需要注意的是,栈中的操作符具有优先级,要按照优先级依次弹出。
以下是中缀表达式转后缀表达式的代码实现:
```python
def infix_to_postfix(infix):
op_stack = [] # 运算符栈
postfix = [] # 后缀表达式
priority = {'(': 1, '+': 2, '-': 2, '*': 3, '/': 3} # 运算符优先级
for char in infix:
if char.isdigit(): # 遇到数字直接输出
postfix.append(char)
elif char == '(':
op_stack.append(char) # 遇到左括号压入栈中
elif char == ')':
while op_stack[-1] != '(':
postfix.append(op_stack.pop()) # 遇到右括号弹出栈中的操作符直到遇到左括号
op_stack.pop() # 弹出左括号
else: # 遇到操作符
while op_stack and priority.get(op_stack[-1], 0) >= priority[char]:
postfix.append(op_stack.pop()) # 弹出栈中优先级大于等于当前操作符的操作符
op_stack.append(char) # 将当前操作符压入栈中
while op_stack:
postfix.append(op_stack.pop()) # 将栈中剩余的操作符依次弹出
return ''.join(postfix)
```
例如,将中缀表达式 `3+4*5/(2+3)` 转为后缀表达式:
```python
infix_to_postfix('3+4*5/(2+3)') # 输出 '345*23+/'
```
可以得到后缀表达式 `345*23+/`。