Калькулятор C ++ с использованием стеков и очередей - PullRequest
1 голос
/ 04 марта 2012

Я пытаюсь понять тему в классе об использовании стеков и очередей в качестве средства программирования калькулятора.Я понимаю, что такое выражение с инфиксным и постфиксным выражением, но как программе легче вычислить выражение и почему в этой ситуации идеально подходят очереди и стеки?Спасибо

1 Ответ

4 голосов
/ 04 марта 2012

Упрощает обработку порядка операций, например:

+ * - 4 2 5 3

Может означать только

((4 - 2) * 5) + 3

Что может быть более читабельным для нас, но нам нужно знатьпорядок операций и соответствующие скобки, чтобы понять это.

Что касается реализации: если бы у вас был стек, вы могли бы обработать приведенное выше выражение следующим образом:

  1. Read +(операция), поместите его в стек,
  2. Read * (операция), вставьте его в стек,
  3. Read - (операция), вставьте его встек,
  4. чтение 4 (число), вершина стека не является числом, поэтому поместите его в стек.
  5. чтение 2 (число),вершина стека - это число, поэтому дважды выскочите из стека, вы получите 4 - 2, вычислите его (2) и поместите результат (2) в стек.
  6. Read5 (число), вершина стека - это число, поэтому дважды выскочите из стека, и вы получите 2 * 5, поместите результат (10) в стек.
  7. Read 3 (число), вершина стека - это число, поэтому дважды выскочите из стека, и вы получите 3 + 10, поместите результат (13) в стек.
  8. НичегоОсталось прочитать, выскочить из стека и вернуть результат (13).

Итак, как вы можете видеть, выражение было оценено с использованием нескольких простых правил и без необходимости поиска по всемустрока для скобок или необходимость решить, имеет ли умножение приоритет над сложением и вычитанием.

...