数据结构程序设计算术表达式求值
时间: 2024-01-08 18:03:40 浏览: 233
算术表达式求值是数据结构程序设计中的一个经典问题。下面是一个简单的算法描述和代码示例:
1. 算法描述:
- 创建一个栈,用于存储运算符和操作数。
- 从左到右遍历表达式的每个字符。
- 如果遇到数字,则将其压入栈中。
- 如果遇到运算符,则将其与栈顶的运算符进行比较:
- 如果栈为空或栈顶为左括号,则将当前运算符压入栈中。
- 如果当前运算符的优先级大于栈顶运算符的优先级,则将当前运算符压入栈中。
- 否则,将栈顶运算符弹出,并将当前运算符压入栈中,直到栈为空或栈顶为左括号,然后将当前运算符压入栈中。
- 如果遇到左括号,则将其压入栈中。
- 如果遇到右括号,则将栈顶的运算符弹出,直到遇到左括号为止。
- 遍历完表达式后,将栈中剩余的运算符依次弹出。
- 最后,栈中剩余的唯一元素即为表达式的结果。
2. 代码示例:
```python
def evaluate_expression(expression):
stack = []
operators = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0, ')': 0}
result = 0
for char in expression:
if char.isdigit():
stack.append(int(char))
elif char in operators:
if not stack or char == '(' or operators[char] > operators[stack[-1]]:
stack.append(char)
else:
while stack and operators[char] <= operators[stack[-1]]:
if stack[-1] == '(':
stack.pop()
break
operator = stack.pop()
operand2 = stack.pop()
operand1 = stack.pop()
if operator == '+':
result = operand1 + operand2
elif operator == '-':
result = operand1 - operand2
elif operator == '*':
result = operand1 * operand2
elif operator == '/':
result = operand1 / operand2
stack.append(result)
elif char == '#':
break
return stack[0]
expression = "#2*(3+4)-6/3#"
result = evaluate_expression(expression)
print("Result:", result) # 输出:12
```
阅读全文