將中綴表示式轉換為字尾表示式的簡便方法
參考文獻:顏晶晶 張濤《將中綴表示式轉換成字尾表示式的三種方法》
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+- 字尾式得到
相關文章
- 算術表示式的字首式、中綴式、字尾式相互轉換
- 逆波蘭演算法、中綴表示式轉字尾表示式演算法
- 【資料結構與演算法】中綴表示式轉字尾表示式以及字尾表示式的計算資料結構演算法
- 教你如何在C++中實現中綴表示式轉字尾表示式C++
- 中綴表示式轉為逆波蘭表示式
- 【資料結構】棧的應用---四則運算表示式求值(中綴表示式與字尾表示式轉換)資料結構
- 資料結構與演算法——棧(五)中綴表示式轉字尾表示式資料結構演算法
- 中綴轉字尾表示式思路分析和程式碼實現
- 將算數表示式轉換成字尾表示式並計算結果
- 中綴表示式
- js實現四則計算(中綴,字尾表示式)JS
- 計算中綴表示式
- 資料結構 中綴表示式轉化資料結構
- 棧的應用---字尾表示式
- 字尾表示式的求值的演算法演算法
- 使用棧結構計算中綴表示式
- C語言- 基礎資料結構和演算法 - 09 棧的應用_中綴表示式轉字尾表示式20220611C語言資料結構演算法
- 將Lucene搜尋查詢轉換為.NET的EF表示式
- C++ 表示式中的型別轉換C++型別
- 【棧】【字串語法】牛牛與字尾表示式字串
- C#字尾表示式解析計算字串公式C#字串公式
- 正規表示式將日期字串的中劃線替換為斜槓/字串
- 中綴表示式的計算,C++版本,Linux環境C++Linux
- 正規表示式的字串替換方法字串
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 使用正規表示式將單詞首字母轉換為大寫
- 3-06. 表示式轉換(25)
- 【資料結構】棧的應用——中綴表示式求值(c++)資料結構C++
- C#中的Lambda表示式和表示式樹C#
- [轉]Java 8 的 lambda 表示式 Java 8 的 lambda 表示式Java
- [藍橋杯 2019 省 B] 字尾表示式
- angular中的表示式Angular
- SQLite中的表示式SQLite
- 使用正規表示式替換字串的方法(replace方法)字串
- android 將字串轉成算術表示式Android字串
- 正規表示式中的特殊字元(轉)字元
- JavaScript中的正規表示式(2) (轉)JavaScript
- JavaScript中的正規表示式(1) (轉)JavaScript