通过栈实现中缀表达式到后缀表达式的转换
时间: 2024-04-30 21:24:37 浏览: 93
中缀表达式到后缀表达式的转换可以使用栈来实现。具体步骤如下:
1. 新建一个栈和一个空字符串,用于存储转换后的后缀表达式。
2. 从左到右遍历中缀表达式的每个字符:
- 如果当前字符是数字或字母,则直接加入后缀表达式字符串中。
- 如果当前字符是左括号"(",则将其压入栈中。
- 如果当前字符是右括号")",则不断弹出栈顶元素并加入后缀表达式字符串中,直到遇到左括号为止。注意,左右括号不应该加入后缀表达式字符串中。
- 如果当前字符是操作符,需要进行如下判断:
- 如果栈为空,或者栈顶元素是左括号"(",则将当前操作符压入栈中。
- 如果当前操作符的优先级大于栈顶操作符的优先级,则将当前操作符压入栈中。
- 如果当前操作符的优先级小于等于栈顶操作符的优先级,则不断弹出栈顶元素并加入后缀表达式字符串中,直到栈为空或者栈顶元素的优先级小于当前操作符为止。最后将当前操作符压入栈中。
3. 遍历完中缀表达式后,如果栈中仍然有元素,则不断弹出栈顶元素并加入后缀表达式字符串中。
4. 返回后缀表达式字符串即可。
下面是一个 Python 实现的例子:
```python
def infix_to_postfix(infix):
stack = []
postfix = ""
priority = {"+": 1, "-": 1, "*": 2, "/": 2, "(": 0}
for c in infix:
if c.isalnum():
postfix += c
elif c == "(":
stack.append(c)
elif c == ")":
while stack and stack[-1] != "(":
postfix += stack.pop()
if stack and stack[-1] == "(":
stack.pop()
else:
while stack and priority[c] <= priority.get(stack[-1], 0):
postfix += stack.pop()
stack.append(c)
while stack:
postfix += stack.pop()
return postfix
```
使用方法:
```python
infix = "a+b*c-(d/e+f)*g"
postfix = infix_to_postfix(infix)
print(postfix) # 输出:abc*+de/f+g*-
```
阅读全文