按中缀形式输入一个四则运算的表达式,利用优选算法把其转换为后缀表达式输出,并求表达式的值。生成代码
时间: 2024-02-25 10:54:59 浏览: 82
下面是一个 Python 程序,可以将中缀表达式转换为后缀表达式,并计算出表达式的值:
```python
def infix_to_postfix(expression):
# 定义运算符的优先级
priority = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0, ')': 0}
# 初始化一个空栈和一个空列表
stack = []
postfix = []
# 遍历表达式中的每个字符
for char in expression:
# 如果是数字,直接添加到后缀表达式中
if char.isdigit():
postfix.append(char)
# 如果是左括号,将其压入栈中
elif char == '(':
stack.append(char)
# 如果是右括号,将栈中的运算符弹出并添加到后缀表达式中,直到遇到左括号
elif char == ')':
while stack[-1] != '(':
postfix.append(stack.pop())
stack.pop()
# 如果是运算符,将栈中优先级大于等于它的运算符弹出并添加到后缀表达式中,然后将其压入栈中
elif char in '+-*/':
while stack and priority[stack[-1]] >= priority[char]:
postfix.append(stack.pop())
stack.append(char)
# 将栈中剩余的运算符弹出并添加到后缀表达式中
while stack:
postfix.append(stack.pop())
# 返回后缀表达式
return postfix
def evaluate_postfix(postfix):
# 初始化一个空栈
stack = []
# 遍历后缀表达式中的每个元素
for char in postfix:
# 如果是数字,将其转换为整数并压入栈中
if char.isdigit():
stack.append(int(char))
# 如果是运算符,弹出栈顶的两个元素进行计算,并将结果压入栈中
elif char in '+-*/':
op2 = stack.pop()
op1 = stack.pop()
if char == '+':
result = op1 + op2
elif char == '-':
result = op1 - op2
elif char == '*':
result = op1 * op2
elif char == '/':
result = op1 / op2
stack.append(result)
# 返回栈顶的元素即为表达式的值
return stack[-1]
# 主程序
expression = input("请输入中缀表达式:")
postfix = infix_to_postfix(expression)
print("后缀表达式为:", ' '.join(postfix))
value = evaluate_postfix(postfix)
print("表达式的值为:", value)
```
程序中首先定义了运算符的优先级,并使用栈和列表两个数据结构将中缀表达式转换为后缀表达式。然后再使用栈计算出后缀表达式的值,并输出结果。
阅读全文