使用堆栈和队列的C ++计算器

时间:2012-03-04 04:21:49

标签: c++ stack queue calculator postfix-notation

我正在尝试理解课堂上关于使用堆栈和队列作为编程计算器的方法的主题。我理解什么是中缀和后缀表达式,但它如何使程序更容易评估表达式以及为什么队列和堆栈在这种情况下是理想的?感谢

1 个答案:

答案 0 :(得分:4)

它使操作的顺序更简单,例如:

+ * - 4 2 5 3

只能意味着

((4 - 2) * 5) + 3

这对我们来说可能更具可读性,但我们需要知道操作的顺序并匹配括号以找出它。

至于实现:如果你有一个堆栈,你可以按如下方式处理上面的表达式:

  1. 阅读+(操作),将其推入堆栈,
  2. 阅读*(操作),将其推入堆栈,
  3. 阅读-(操作),将其推入堆栈,
  4. 读取4(数字),堆栈顶部不是数字,所以将其推入堆栈。
  5. 读取2(一个数字),堆栈的顶部是一个数字,因此从堆栈弹出两次,得到4 - 2,计算它(2),然后推送结果(2)进入堆栈。
  6. 读取5(一个数字),堆栈的顶部是一个数字,所以从堆栈中弹出两次,得到2 * 5,将结果(10)推到叠加。
  7. 读取3(一个数字),堆栈的顶部是一个数字,所以从堆栈中弹出两次,得到3 + 10,将结果(13)推到叠加。
  8. 没有东西要读,从堆栈中弹出并返回结果(13)。
  9. 正如您所看到的,表达式是使用一些简单的规则进行评估的,无需在整个字符串中搜索括号或者必须确定乘法是否优先于加法和减法。