Динамика стека

0

Мне нужно немного помочь с пониманием dymanic стека в структурах данных.

У меня есть эта надстрочная нотация:

a b c d * + 3 * + 5 6 2 c * + * +

Оценка будет:

a + 3b + 3cd + 30 + 10c

Но каков алгоритм, чтобы узнать динамику этого стека?

LE: Спасибо, товарищи за то, что помогли мне это понять.

-> a, b, c, d 
-> a, b c * d 
-> a, b + c * d, 3 
-> 3 * (b + c * d), a 
-> 2 * c, 6, 5, a + (b + c * d) + 3
-> 5 * (6 + 2 * c), a + (b + c * d) + 3
-> a + (b + c * d) + 3 + 5 * (6 + 2 * c)

Я вижу, что ниже приведены еще несколько правильных объяснений. Я сделал это здесь настолько подробно, насколько мог, чтобы его было легче понять, если кому-то это понадобится.

  • 1
    Что такое «динамический»?
  • 0
    Вы имеете в виду динамический алгоритм для постфикса?
Показать ещё 3 комментария
Теги:
stack

3 ответа

2
Лучший ответ

Для каждого элемента в последовательности:

  • Если элемент является операндом, нажмите его в стек. (Стек растет на единицу.)
  • Если элемент является оператором, вытащите два элемента из стека, примените оператор, верните результат обратно в стек. (Стек сжимается на единицу.)
  • 0
    @ user2485710 Так ты думаешь, что ОП говорил о стеке выполнения? Ну, нет однозначного ответа на этот вопрос, если об этом спрашивают.
  • 0
    обычно это «стопка», на которую ссылаются люди.
2

Существуют два основных правила:

  • Если элемент является операндом, нажмите его в стеке
  • Если это оператор, выполните операцию, выбив два элемента, а затем снова нажмите результат в стеке

Пример:

1) стек заполнен abcd

a b c d

2) *, c и d выведены, c * d выполняется, и результат вставляется в стек

a b cd

3) +, вычисляется b + cd

a b+cd

3) 3 вставляется в стек

a b+cd 3

4) * и (b + cd) * 3 = 3b + 3cd вычисляется

a 3(b+cd)

5) + и вычисляется a + 3 (b + cd)

a+3(b+cd) (one element on the stack)

6) 5, 6, 2, c толкаются

a+3(b+cd) 5 6 2 c

7) * встречается

a+3(b+cd) 5 6 2*c

8) +

a+3(b+cd) 5 6+2*c

9) *

a+3(b+cd) 5*(6+2*c)

10) +

a+3(b+cd)+5*(6+2*c)

Всего

a + 3b + 3cd + 30 + 10c

как и ожидалось


Ссылки: оценка Postfix со стеком

1

Прогрессия стека:

a b c d f g 3 h i 5 6 2 c j k m n
  a b c b a g a   i 5 6 2 6 5 i
    a b a   a       i 5 6 5 i
      a               i 5 i
                        i

Где:

f = d*c
g = d*c+b
h = 3*(d*c+b)
i = 3*(d*c+b)+a
j = c*2
k = c*2+6
m = (c*2+6)*5
n = (c*2+6)*5+3*(d*c+b)+a

Учитывая, что все операции являются двоичными, общий алгоритм:

  • Если элемент является операндом, тогда нажмите (сохраните) его в стек.

  • Если элемент является операцией, затем поп (загрузите) два верхних большинства значения из стека, выполните операцию над ними и нажмите (сохраните) результат обратно в стек.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню