中缀表达式转后缀栈c
时间: 2024-06-14 07:06:23 浏览: 81
中缀表达式转后缀表达式是一种常见的算法问题。下面是一种实现思路和代码实现总结:
1. 中缀表达式转后缀表达式的实现思路:
- 创建一个空栈和一个空列表,用于存储运算符和转换后的后缀表达式。
- 如果遇到左括号,将其压入栈中。
- 如果遇到右括号,将栈中的运算符弹出并添加到后缀表达式列表中,直到遇到左括号为止。
- 如果遇到运算符,将其与栈顶的运算符进行比较:
- 如果栈为空或栈顶为左括号,直接将运算符压入栈中。
- 如果栈顶的运算符优先级低于当前运算符,将当前运算符压入栈中。
- 如果栈顶的运算符优先级高于或等于当前运算符,将栈顶的运算符弹出并添加到后缀表达式列表中,然后将当前运算符压入栈中。
- 遍历完中缀表达式后,将栈中剩余的运算符依次弹出并添加到后缀表达式列表中。
2. 中缀表达式转后缀表达式的代码实现总结:
```python
def infix_to_postfix(expression):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
stack = []
postfix = []
for char in expression:
if char.isalnum():
postfix.append(char)
elif char == '(':
stack.append(char)
elif char == ')':
while stack and stack[-1] != '(':
postfix.append(stack.pop())
stack.pop()
else:
while stack and precedence[char] <= precedence.get(stack[-1], 0):
postfix.append(stack.pop())
stack.append(char)
while stack:
postfix.append(stack.pop())
return ''.join(postfix)
```
阅读全文