2013-09-22 158 views
0

林應該轉換到以下後綴形式: (A + B * C)/(D - E * F)轉換綴以後綴

我這一個答案:ABC*+DEF*-/

這是正確的嗎?如果我使用了錯誤的後綴表單,那麼後面會有很多問題都是不正確的。如果我錯了,你能告訴我爲什麼?謝謝你的幫助。

回答

1

我知道這是一箇舊的提交,但這裏去

這是正確的形式。您可以通過自己迭代後綴來輕鬆檢查它,並將其轉換回中綴,像這樣,從一個空堆棧開始。

A是數組中的第一個元素,它是一個數字,所以將它推入堆棧。對於B and C . Therefore your stack is now A,B,C`也是如此。

下一個令牌是一個運算符(*),它需要兩個操作數。因此,彈出堆棧中的前兩個操作數,或BC。將兩者合併,由操作員分開,並將其推入堆棧。爲了簡化算法,只需在所有內容的周圍放置圓括號。你的堆棧現在是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*-/ 

作爲較高優先級的操作者來它可以放在堆與已經較低優先級的操作,但在相反的情況下,如果在堆疊和低優先級符號較高優先級操作者配備然後較高優先級的操作者將從棧彈出到後綴表達式。注意: - 沒有兩個相同的優先級操作員可以一起堆疊在一起,因爲第二個操作員會先彈出相同優先級的操作員。