將中綴表示式轉換為字尾表示式的簡便方法

pengfoo發表於2012-09-03

參考文獻:顏晶晶 張濤《將中綴表示式轉換成字尾表示式的三種方法》

http://blog.csdn.net/glldc/article/details/1818787

第一種:利用棧來實現,該方法為常規方法,論文中也有介紹,但本人認為,該方法不利於記憶,且費時,不足以應付考試的要求。再此不再贅述。

第二種:後序遍歷二叉樹法:

例:將中綴表示式a+(b-c)*d轉換成字尾表示式

第一步:畫出其對應的二叉樹;

 

後續遍歷該二叉樹,得到字尾表示式為:a b c - d * +

 附:後續遍歷的方法:後序遍歷指在訪問根結點、遍歷左子樹與遍歷右子樹三者中,首先遍歷左子樹,然後遍歷右子樹,最後遍歷訪問根結點,在遍歷左、右子樹時,仍然先遍歷左子樹,然後遍歷右子樹,最後遍歷根結點。

 第三種方法:加括號法--最簡便最有創新性的方法,足以應付考試。

          加括號法就是先將待求的中級表示式依次排開, 再將每一步要計算的表示式加上括號, 最後將每個運算子移到其所在括號的外面, 這樣, 從左到右掃描得到的序列去掉括號後就
是字尾表示式。

仍然是上例:

第一步:按優先順序別, 有括號先求括號裡的原則, 將每一步要計算的表示式加上括號, 得到表示式為

( a + ( (b-c) *d ) )

 第二步:將每個運算子移到其所在括號的外面, 即外移一層

abc-d*+

 再例:

將中綴表示式 a+b*c-(d+e)轉換為字尾表示式:

第一步:按照運算子的優先順序對所有的運算單位加括號~
        式子變成了:((a+(b*c))-(d+e))
字尾:把運算子號移動到對應的括號後面
              則變成拉:((a(bc)* )+ (de)+ )-
              把括號去掉:abc*+de+-  字尾式得到

 

相關文章