中缀表达式转后缀表达式实现代码
时间: 2023-11-20 13:51:11 浏览: 75
中缀表达式转后缀表达式是一种常见的算法,可以通过栈来实现。具体步骤如下:
1. 初始化一个空栈和一个空列表,用于存储后缀表达式。
2. 从左到右遍历中缀表达式的每个元素。
3. 如果当前元素是数字,将其添加到后缀表达式列表中。
4. 如果当前元素是左括号,将其压入栈中。
5. 如果当前元素是右括号,则将栈中的元素弹出并添加到后缀表达式列表中,直到遇到左括号。左括号不会被添加到后缀表达式列表中。
6. 如果当前元素是运算符,比较其与栈顶运算符的优先级:
- 如果当前运算符优先级高于栈顶运算符,则将其压入栈中。
- 否则,将栈顶运算符弹出并添加到后缀表达式列表中,直到遇到一个优先级低于或等于当前运算符的栈顶运算符。然后将当前运算符压入栈中。
7. 如果中缀表达式还没有被完全遍历,返回步骤2。
8. 如果中缀表达式已经被完全遍历,将栈中剩余的运算符弹出并添加到后缀表达式列表中。
9. 后缀表达式列表中的元素顺序即为转换后的后缀表达式。
下面是一个Python实现的例子:
```python
def infix_to_postfix(infix):
precedence = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3}
stack = []
postfix = []
for char in infix:
if char.isdigit():
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.get(char, 0) <= precedence.get(stack[-1], 0):
postfix.append(stack.pop())
stack.append(char)
while stack:
postfix.append(stack.pop())
return ''.join(postfix)
```
阅读全文