利用栈计算中缀表达式的值代码
时间: 2024-11-06 16:15:33 浏览: 30
利用栈来计算中缀表达式的值通常涉及到两个步骤:首先将中缀表达式转换成后缀(也叫逆波兰表示法,RPN),然后使用后缀表达式和栈的数据结构来求解。
以下是一个简单的Python示例,演示了如何使用栈来计算中缀表达式的值:
```python
def infix_to_postfix(expression):
prec = {'+': 1, '-': 1, '*': 2, '/': 2, '^': 3} # 定义运算符优先级
output = [] # 后缀表达式的栈
stack = [] # 当前操作数的栈
tokens = expression.split() # 将字符串分割为单词列表
for token in tokens:
if token.isdigit(): # 如果是数字,直接压入结果栈
stack.append(int(token))
elif token in ['+', '-', '*', '/', '^']: # 运算符处理
while (stack and stack[-1] != '(' and
prec[token] <= prec[stack[-1]]): # 检查是否有更高优先级的运算符在栈顶
output.append(stack.pop())
stack.append(token) # 运算符压入栈
elif token == '(': # 左括号入栈
stack.append(token)
elif token == ')': # 右括号出栈直到遇到左括号,并将它们添加到输出
while stack[-1] != '(':
output.append(stack.pop())
stack.pop()
while stack: # 最后处理剩余的运算符
output.append(stack.pop())
return output
def evaluate_postfix(postfix_expression):
stack = []
for token in postfix_expression:
if token.isdigit():
stack.append(int(token))
else:
b = stack.pop()
a = stack.pop()
if token == '+':
stack.append(a + b)
elif token == '-':
stack.append(a - b)
elif token == '*':
stack.append(a * b)
elif token == '/':
stack.append(a / b)
elif token == '^':
stack.append(a ** b)
return stack.pop()
# 测试
expression = "5 3 + 4 *"
postfix = infix_to_postfix(expression)
result = evaluate_postfix(postfix)
print(f"中缀表达式 {expression} 的值是: {result}")
阅读全文