後綴表達式算法
後綴表達式,又稱逆波蘭式,指的是不包含括號,運算符放在兩個運算對象的後面,全部的計算按運算符出現的順序,嚴格從左向右進行(再也不考慮運算符的優先規則)。spa
運用後綴表達式進行計算的具體作法:
創建一個棧S 。從左到右讀表達式,若是讀到操做數就將它壓入棧S中,若是讀到n元運算符(即須要參數個數爲n的運算符)則取出由棧頂向下的n項按操做數運算,再將運算的結果代替原棧頂的n項,壓入棧S中 。若是後綴表達式未讀完,則重複上面過程,最後輸出棧頂的數值則爲結束。對象
計算機實現轉換:
將中綴表達式轉換爲後綴表達式的算法思想:
·開始掃描;
·數字時,加入後綴表達式;
·運算符:
a. 若爲 '(',入棧;
b. 若爲 ')',則依次把棧中的的運算符加入後綴表達式中,直到出現'(',從棧中刪除'(' ;
c. 若爲 除括號外的其餘運算符, 當其優先級高於除'('之外的棧頂運算符時,直接入棧。不然從棧頂開始,依次彈出比當前處理的運算符優先級高和優先級相等的運算符,直到一個比它優先級低的或者遇到了一個左括號爲止,而後將其自身壓入棧中(先出後入)。
·當掃描的中綴表達式結束時,棧中的的全部運算符出棧;字符串
人工實現轉換:畫一個二叉樹,而後後序遍歷便可。數學
前綴表達式二叉樹
前綴表達式是一種沒有括號的算術表達式,與中綴表達式不一樣的是,其將運算符寫在前面,操做數寫在後面。爲記念其發明者波蘭數學家Jan Lukasiewicz,前綴表達式也稱爲「波蘭式」。遍歷
對前綴表達式求值,要從右至左掃描表達式,首先從右邊第一個字符開始判斷,若當前字符是數字則一直到數字串的末尾再記錄下來,若爲運算符,則將右邊離得最近的兩個「數字串」做相應運算,而後以此做爲一個新的「數字串」並記錄下來;掃描到表達式最左端時掃描結束,最後運算的值即爲表達式的值。計算機
轉換算法字符
(1) 首先構造一個運算符棧(也可放置括號),運算符(以括號爲分界點)在棧內遵循越往棧頂優先級不下降的原則進行排列。
(2)從右至左掃描中綴表達式,從右邊第一個字符開始判斷:
若是當前字符是數字,則分析到數字串的結尾並將數字串直接輸出。
若是是運算符,則比較優先級。若是當前運算符的優先級大於等於棧頂運算符的優先級(當棧頂是括號時,直接入棧),則將運算符直接入棧;不然將棧頂運算符出棧並輸出,直到當前運算符的優先級大於等於棧頂運算符的優先級(當棧頂是括號時,直接入棧),再將當前運算符入棧。
若是是括號,則根據括號的方向進行處理。若是是右括號,則直接入棧;不然,遇左括號前將全部的運算符所有出棧並輸出,遇右括號後將左右的兩括號一塊兒刪除。
(3) 重複上述操做(2)直至掃描結束,將棧內剩餘運算符所有出棧並輸出,再逆綴輸出字符串。中綴表達式也就轉換爲前綴表達式了。數字