中缀表达式转为后缀表达式如何简单实现
时间: 2023-06-29 22:08:02 浏览: 297
将中缀表达式转化为后缀表达式
中缀表达式转后缀表达式的算法又称为“逆波兰表达式”,可以通过使用栈来实现简单的算法。
以下是算法的步骤:
1. 创建一个空栈和一个空串作为结果字符串。
2. 从左到右扫描中缀表达式的每个元素。
3. 如果该元素是操作数,则将其附加到结果字符串的末尾。
4. 如果该元素是开括号“(”,则将其压入栈中。
5. 如果该元素是闭括号“)”,则依次弹出栈顶元素并将其附加到结果字符串,直到遇到开括号为止。注意,开括号不会被包含在结果字符串中。
6. 如果该元素是操作符,则依次弹出栈顶元素并将其附加到结果字符串,直到栈为空或栈顶元素是开括号或者栈顶元素的优先级不大于该操作符。然后将该操作符压入栈中。
7. 如果中缀表达式被完全扫描,则依次弹出栈顶元素并将其附加到结果字符串,直到栈为空。
8. 结束。
下面是一个示例代码,实现中缀表达式转后缀表达式:
```python
def infix_to_postfix(infix_expression):
precedence = {'*': 3, '/': 3, '+': 2, '-': 2, '(': 1}
operator_stack = []
postfix_list = []
token_list = infix_expression.split()
for token in token_list:
if token.isnumeric():
postfix_list.append(token)
elif token == '(':
operator_stack.append(token)
elif token == ')':
top_token = operator_stack.pop()
while top_token != '(':
postfix_list.append(top_token)
top_token = operator_stack.pop()
else:
while (len(operator_stack) != 0) and (precedence[operator_stack[-1]] >= precedence[token]):
postfix_list.append(operator_stack.pop())
operator_stack.append(token)
while len(operator_stack) != 0:
postfix_list.append(operator_stack.pop())
return " ".join(postfix_list)
```
这里的 `infix_expression` 是中缀表达式字符串,函数返回一个字符串,其中包含转换为后缀表达式的结果。
阅读全文