2013-09-22 4 views
0

Im предполагается преобразовать следующее формы постфикса: (A + B * C)/(D - E * F)новообращенного инфикс к постфиксу

Я получил это для ответа: ABC*+DEF*-/

Правильно ли это? После этого возникает ряд вопросов, которые будут неверными, если я использую неправильную форму постфикса. Если я ошибаюсь, вы можете мне показать, почему? Спасибо за любую помощь.

ответ

1

Я знаю, что это старое подчинение, но здесь идет

Это правильная форма. Вы можете легко проверить его, итерации через постфикс самостоятельно и преобразования его обратно в инфикс, например, начиная с пустого стека.

A - первый элемент в массиве, и это число, поэтому нажмите его в стек. То же самое справедливо и для B and C . Therefore your stack is now A, B, C`.

Следующий токен - это оператор (*), и он принимает два операнда. Поэтому вытащите верхние два операнда из стека, или B и C. Объедините два, разделенных оператором, и вставьте их в стек. Чтобы упростить алгоритм, просто поместите круглые скобки вокруг всего. Ваш стек теперь A,(B*C).

Ваш следующий токен - другой бинарный оператор (+). Повторите тот же процесс, что и выше, и вы получите свой стек как (A+(B*C)).

Повторите процесс для остальной части его, и вы получите выражение, эквивалентное (A+B*C)/(D-E*F)

0

да, итерация назад это метод, чтобы проверить это, но вы также можете преобразовать это выражение из начиная с инфиксом в постфикс. выражение :-(A + B C)/(D-E F) начать с первого символа в выражении.

symbol    stack(operator)    postfix(operand) 
(      (
    A      (       A 
    +      (+       A 
    B      (+       AB 
    *      (+*       AB 
    C      (+*       ABC 
)      (+*)      ABC 
    as bracket closes every symbol inside bracket popout(LIFO) 
                 ABC*+ 
/     /       ABC*+ 
    (      /(       ABC*+ 
    D      /(       ABC*+D 
    -      /(-       ABC*+D 
    E      /(-       ABC*+DE 
    *      /(-*      ABC*+DE 
    F      /(-*      ABC*+DEF 
)      /(-*)      ABC*+DEF 
          /      ABC*+DEF*- 
    as all symbol have been done operator left in stack will popout(LIFO) 
                 ABC*+DEF*-/ 

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