本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。如上图所示,计算器由两个堆栈组成,一个堆栈 s1 存放数字,另一个堆栈 s2 存放运算符。计算器的最下方有一个等号键,每次按下这
时间: 2023-04-21 14:06:50 浏览: 87
个键,计算器就会将堆栈中的数字和运算符依次弹出,进行计算,并将结果压入数字堆栈中。设计一个函数,接受一个字符串表达式作为输入,返回计算结果。
例如,输入字符串表达式 "3+5*2-6/3=",计算过程如下:
1. 将数字 3 压入数字堆栈 s1 中。
2. 将运算符 + 压入运算符堆栈 s2 中。
3. 将数字 5 压入数字堆栈 s1 中。
4. 将运算符 * 压入运算符堆栈 s2 中。
5. 将数字 2 压入数字堆栈 s1 中。
6. 弹出运算符 *,弹出数字 2 和 5,计算 5*2=10,将结果 10 压入数字堆栈 s1 中。
7. 将运算符 - 压入运算符堆栈 s2 中。
8. 将数字 6 压入数字堆栈 s1 中。
9. 将运算符 / 压入运算符堆栈 s2 中。
10. 将数字 3 压入数字堆栈 s1 中。
11. 弹出运算符 /,弹出数字 3 和 6,计算 6/3=2,将结果 2 压入数字堆栈 s1 中。
12. 弹出运算符 -,弹出数字 10 和 2,计算 10-2=8,将结果 8 压入数字堆栈 s1 中。
13. 弹出运算符 +,弹出数字 3 和 8,计算 3+8=11,将结果 11 压入数字堆栈 s1 中。
14. 弹出等号键 =,计算结束,返回数字堆栈 s1 中的唯一元素 11。
提示:可以使用 Python 中的列表模拟堆栈,例如使用 append() 方法压入元素,使用 pop() 方法弹出元素。可以使用 eval() 函数计算表达式的值,但是这种方法不安全,容易受到恶意输入的攻击,不建议使用。
阅读全文