通过栈实现四则运算
时间: 2024-02-23 09:02:22 浏览: 15
可以通过两个栈来实现四则运算,一个栈存储操作数,另一个栈存储操作符。具体实现步骤如下:
1. 读取表达式中的每一个字符,如果是数字则将其入操作数栈,如果是操作符则将其入操作符栈。
2. 当遇到一个操作符时,需要判断操作符栈顶的操作符与当前操作符的优先级。如果栈顶操作符的优先级大于等于当前操作符,则取出操作数栈中的两个操作数,取出操作符栈顶的操作符进行计算,并将结果入操作数栈。重复此操作直到栈顶操作符的优先级小于当前操作符,然后将当前操作符入操作符栈。
3. 当所有字符都读取完毕后,如果操作符栈不为空,则取出操作数栈中的两个操作数,取出操作符栈顶的操作符进行计算,并将结果入操作数栈。重复此操作直到操作符栈为空。
4. 最后,操作数栈中剩下的唯一一个元素就是表达式的计算结果。
以下是使用 Python 实现的代码示例:
```
def calculate(expression):
numbers = []
operators = []
i = 0
while i < len(expression):
c = expression[i]
if c.isdigit():
j = i
while j < len(expression) and expression[j].isdigit():
j += 1
numbers.append(int(expression[i:j]))
i = j
elif c in ['+', '-', '*', '/']:
while operators and precedence(operators[-1]) >= precedence(c):
b = numbers.pop()
a = numbers.pop()
op = operators.pop()
numbers.append(apply_operator(a, b, op))
operators.append(c)
i += 1
else:
i += 1
while operators:
b = numbers.pop()
a = numbers.pop()
op = operators.pop()
numbers.append(apply_operator(a, b, op))
return numbers[0]
def precedence(operator):
if operator in ['+', '-']:
return 1
elif operator in ['*', '/']:
return 2
else:
return 0
def apply_operator(a, b, operator):
if operator == '+':
return a + b
elif operator == '-':
return a - b
elif operator == '*':
return a * b
elif operator == '/':
return a / b
expression = '3+4*5-6/2'
result = calculate(expression)
print(result) # 输出 20
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)