С помощью обратного полиса sh Обозначение вводится пользователем в том порядке, в котором он был введен.
- Разделение ввода пользователя на последовательность операндов и операторов (назовите их токенами).
- Создайте один пустой стек для хранения операндов и промежуточных результатов.
- Действуйте на пользовательском вводе (то есть 'call it' ) в Порядок следования (для вашего примера ввода последовательность будет 11, затем 6, затем 5 и т. д. c.)
- Для операнда pu sh операнд в стеке.
- Для оператора
- Поп-операнд 2 со стека
- Поп-операнд 1 со стека
- Pu sh Результат оператора, примененный к операнду 1 и операнду 2 в стек
- После активации последнего токена в стеке должно остаться одно значение; результат выражения.
Использует ли это дерево выражений для создания калькулятора RPN? Входная строка эквивалентна дереву выражений (см. пример дерева выражений ). Он кодирует ту же информацию; а именно, последовательность операций. «5» и «4» должны быть добавлены до того, как результат может быть вычтен из «6» и т. Д. c. Поэтому, возможно, лучший способ сказать, что эквивалент дерева выражений используется в качестве входных данных для калькулятора RPN.
Пример с использованием примера ввода из фрагмента кода.
Empty stack {}
Push 11 {11}
Push 6 {11, 6}
Push 5 {11, 6, 5}
Push 4 {11, 6, 5, 4}
Pop operand 2, = 4 {11, 6, 5}
Pop operand 1, = 5 {11, 6}
Push + operator result {11, 6, 9}
Pop operand 2 = 9 {11, 6}
Pop operand 1 = 6 {11}
Push - operator result {11, -3}
Pop operand 2 = -3 {11}
Pop operand 1 = 11 {}
Push / operator result {-11/3}
Push 7 {-11/3, 7}
Pop operand 2 = 7 {-11/3}
Pop operand 1 = -11/3 {}
Push * operator result {-77/3}
Push 2 {-77/3, 2}
Push 2 {-77/3, 2, 2}
Push 2 {-77/3, 2, 2, 2}
Pop operand 2 = 2 {-77/3, 2, 2}
Pop operand 1 = 2 {-77/3, 2}
Push + operator result {-77/3, 2, 4}
Pop operand 2 = 4 {-77/3, 2}
Pop operand 1 = 2 {-77/3}
Push - operator result {-77/3, -2}
NOTE: There are two values left on the stack, so the expression is incomplete.
Let's add a '+' operator to complete it.
Pop operand 2 = -2 {-77/3}
Pop operand 1 = -77/3 {}
Push + operator result {-83/3}
So, there are no more tokens *and* there is one value on the stack. Success!
Pop final result = -83/3 {}