我正在尝试理解课堂上关于使用堆栈和队列作为编程计算器的方法的主题。我理解什么是中缀和后缀表达式,但它如何使程序更容易评估表达式以及为什么队列和堆栈在这种情况下是理想的?感谢
答案 0 :(得分:4)
它使操作的顺序更简单,例如:
+ * - 4 2 5 3
只能意味着
((4 - 2) * 5) + 3
这对我们来说可能更具可读性,但我们需要知道操作的顺序并匹配括号以找出它。
至于实现:如果你有一个堆栈,你可以按如下方式处理上面的表达式:
+
(操作),将其推入堆栈,*
(操作),将其推入堆栈,-
(操作),将其推入堆栈,4
(数字),堆栈顶部不是数字,所以将其推入堆栈。2
(一个数字),堆栈的顶部是一个数字,因此从堆栈弹出两次,得到4 - 2
,计算它(2
),然后推送结果(2
)进入堆栈。5
(一个数字),堆栈的顶部是一个数字,所以从堆栈中弹出两次,得到2 * 5
,将结果(10
)推到叠加。3
(一个数字),堆栈的顶部是一个数字,所以从堆栈中弹出两次,得到3 + 10
,将结果(13
)推到叠加。13
)。正如您所看到的,表达式是使用一些简单的规则进行评估的,无需在整个字符串中搜索括号或者必须确定乘法是否优先于加法和减法。