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

C++ Calculator using Stacks and Queues

本文关键字:C++ 计算器 队列 堆栈      更新时间:2023-10-16

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

它使操作顺序更易于处理,例如:

+ * - 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

正如你所看到的,表达式是使用一些简单的规则来计算的,而不必在整个字符串中搜索括号,也不必决定乘法是否优先于加法和减法。