求中缀表达式求值程序代码
时间: 2023-09-09 16:07:07 浏览: 85
具有表达式的中缀表达式求值程序
以下是一个基于栈的中缀表达式求值程序的代码示例:
```python
# 定义运算符的优先级
precedence = {'+': 1, '-': 1, '*': 2, '/': 2}
# 定义栈类
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
# 定义中缀表达式求值函数
def evaluate(expression):
# 将表达式转换为仅包含数字、运算符和括号的列表
tokens = []
number = ''
for char in expression:
if char.isdigit() or char == '.':
number += char
else:
if number:
tokens.append(float(number))
number = ''
if char != ' ':
tokens.append(char)
if number:
tokens.append(float(number))
# 定义栈和输出列表
stack = Stack()
output = []
# 遍历表达式的每个token
for token in tokens:
if isinstance(token, float):
# 如果是数字,直接输出
output.append(token)
elif token in precedence:
# 如果是运算符,弹出栈中优先级较高的运算符,并输出到输出列表中
while not stack.is_empty() and stack.peek() in precedence and precedence[stack.peek()] >= precedence[token]:
output.append(stack.pop())
stack.push(token)
elif token == '(':
# 如果是左括号,将其压入栈中
stack.push(token)
elif token == ')':
# 如果是右括号,弹出栈中左括号前的所有运算符,并输出到输出列表中
while not stack.is_empty() and stack.peek() != '(':
output.append(stack.pop())
stack.pop()
# 将栈中剩余的所有运算符弹出并输出到输出列表中
while not stack.is_empty():
output.append(stack.pop())
# 计算输出列表中的后缀表达式
stack = Stack()
for token in output:
if isinstance(token, float):
stack.push(token)
else:
operand2 = stack.pop()
operand1 = stack.pop()
if token == '+':
stack.push(operand1 + operand2)
elif token == '-':
stack.push(operand1 - operand2)
elif token == '*':
stack.push(operand1 * operand2)
elif token == '/':
stack.push(operand1 / operand2)
# 返回计算结果
return stack.pop()
```
希望对你有所帮助!
阅读全文