Я пытаюсь понять тему в классе об использовании стеков и очередей в качестве средства программирования калькулятора. Я понимаю, что такое инфиксное и постфиксное выражение, но как облегчить программе вычисление выражения и почему очереди и стеки идеальны в этой ситуации? Спасибо
Калькулятор C++ с использованием стеков и очередей
Ответы (1)
Это упрощает обработку порядка операций, например:
+ * - 4 2 5 3
Может означать только
((4 - 2) * 5) + 3
Это может быть более читаемо для нас, но нам нужно знать порядок операций и сопоставлять круглые скобки, чтобы понять это.
Что касается реализации: если бы у вас был стек, вы могли бы обработать приведенное выше выражение следующим образом:
- Прочитайте
+
(операция), поместите его в стек, - Прочитайте
*
(операция), поместите его в стек, - Прочитайте
-
(операция), поместите его в стек, - Прочитайте
4
(число), вершина стека не является числом, поэтому поместите его в стек. - Прочитайте
2
(число), вершина стека — это число, поэтому извлеките из стека дважды, вы получите4 - 2
, вычислите его (2
) и поместите результат (2
) в стек. - Прочитайте
5
(число), вершина стека - это число, поэтому дважды извлеките из стека, вы получите2 * 5
, поместите результат (10
) в стек. - Прочитайте
3
(число), вершина стека - это число, поэтому дважды извлеките из стека, вы получите3 + 10
, поместите результат (13
) в стек. - Читать нечего, вытаскиваем из стека и возвращаем результат (
13
).
Итак, как вы можете видеть, выражение вычислялось с использованием нескольких простых правил и без необходимости поиска во всей строке скобок или необходимости решать, имеет ли умножение приоритет над сложением и вычитанием.
person
trutheality
schedule
04.03.2012