我簡單說壹下。
程序中有兩個堆棧,壹個用於存放值,另壹個用於存放操作符。
程序啟動後,第壹個操作符和數值首先被放入堆棧。
獲取下壹個操作符下壹個操作
比較NextOP和棧頂操作符之間的優先級。
案例1。如果NextOP的優先級高於棧頂的運算符,則將NextOP壓入運算符棧。繼續步驟b。
案例二。如果優先級為2。NextOP低於棧頂運算符,使用棧頂運算符,用數值棧的前兩個值進行運算,運算結果被推入數值棧。重復步驟C,如果操作符堆棧為空,則操作結束,步驟d
d運算的結果在值棧中。
被調查人:cpplyy-錢總四級10-8 09:12。
1.分治搜索法每次都找到最後壹次操作的符號,對其左右進行深度搜索,直到得到結果。
2.堆棧處理方法小數堆棧和符號堆棧先定義壹個常量數組(判斷運算\堆棧入口\錯誤),然後從左到右依次操作數入口堆棧符號和符號堆棧比較運算\堆棧入口\錯誤運算操作從數堆棧中取數並進行以下運算,然後結果進入數堆棧。最終結果在數字堆棧中。
被申請人:LXYXYNT-舉人四級10-8 12:50
堆棧就可以了。
受訪者:SD 542927172-見習魔術師二級10-9 20:09。
倉庫
表達式的計算應用廣泛,如電力調度系統中的計算遙測,車站售票系統中的票價類型計算公式等。
描述了中性表達式轉換為後表達式和後表達式的求值算法,並給出了C++源代碼,給出了壹個相當簡潔的stack C++模板類。
中綴表達式到後綴表達式的轉換
為了將中綴表達式轉換為後綴表示法表示的等價表達式,需要了解運算符的優先級和組合。優先級或操作員的實力決定了評估順序;具有較高優先級的操作符在具有較低優先級的操作符之前被評估。如果所有運算符都具有相同的優先級,那麽計算順序取決於它們的組合。運算符的結合性定義了具有相同優先級的運算符組合的順序(從右到左或從左到右)。
轉換過程包括用以下算法讀取中綴表達式的操作數、運算符和括號:
1.初始化壹個空堆棧並清空結果字符串變量。
2.從左到右閱讀中綴表達式,壹次壹個字符。
3.如果字符是操作數,則將其添加到結果字符串中。
4.如果字符是操作符,彈出操作符,直到遇到左括號、優先級較低的操作符或優先級相同的右連接符號。將該運算符壓入堆棧。
5.如果該字符是壹個開括號,則將其壓入堆棧。
6.如果字符是右括號,在遇到左括號之前,所有操作符都會彈出,然後將它們添加到結果字符串中。
7.如果到達了輸入字符串的末尾,所有的操作符都會彈出並被添加到結果字符串中。
後綴表達式的求值
計算後綴表達式比直接計算中綴表達式簡單。在後綴表達式中,不需要括號,運算符的優先級不再起作用。您可以使用以下算法來計算後綴表達式:
1.初始化壹個空堆棧
2.從左到右讀後綴表達式。
3.如果字符是壹個操作數,將它壓入堆棧。
4.如果字符是運算符,則彈出兩個操作數,執行適當的運算,然後將結果推送到堆棧上。如果不能彈出兩個操作數,後綴表達式語法不正確。
5.轉到後綴表達式的末尾,從堆棧中彈出結果。如果後綴表達式格式良好,堆棧應該是空的。
這裏不方便寫。如果妳解釋,+Q244957727
給分,給分~
響應者:wind _ teller-魔術師四級10-10 21:57。
表達式的計算應用廣泛,如電力調度系統中的計算遙測,車站售票系統中的票價類型計算公式等。
描述了中性表達式轉換為後表達式和後表達式的求值算法,並給出了C++源代碼,給出了壹個相當簡潔的stack C++模板類。
中綴表達式到後綴表達式的轉換
為了將中綴表達式轉換為後綴表示法表示的等價表達式,需要了解運算符的優先級和組合。優先級或操作員的實力決定了評估順序;具有較高優先級的操作符在具有較低優先級的操作符之前被評估。如果所有運算符都具有相同的優先級,那麽計算順序取決於它們的組合。運算符的結合性定義了具有相同優先級的運算符組合的順序(從右到左或從左到右)。
轉換過程包括用以下算法讀取中綴表達式的操作數、運算符和括號:
1.初始化壹個空堆棧並清空結果字符串變量。
2.從左到右閱讀中綴表達式,壹次壹個字符。
3.如果字符是操作數,則將其添加到結果字符串中。
4.如果字符是操作符,彈出操作符,直到遇到左括號、優先級較低的操作符或優先級相同的右連接符號。將該運算符壓入堆棧。
5.如果該字符是壹個開括號,則將其壓入堆棧。
6.如果字符是右括號,在遇到左括號之前,所有操作符都會彈出,然後將它們添加到結果字符串中。
7.如果到達了輸入字符串的末尾,所有的操作符都會彈出並被添加到結果字符串中。
後綴表達式的求值
計算後綴表達式比直接計算中綴表達式簡單。在後綴表達式中,不需要括號,運算符的優先級不再起作用。您可以使用以下算法來計算後綴表達式:
1.初始化壹個空堆棧
2.從左到右讀後綴表達式。
3.如果字符是壹個操作數,將它壓入堆棧。
4.如果字符是運算符,則彈出兩個操作數,執行適當的運算,然後將結果推送到堆棧上。如果不能彈出兩個操作數,後綴表達式語法不正確。
5.轉到後綴表達式的末尾,從堆棧中彈出結果。如果後綴表達式格式良好,堆棧應該是空的。
在編譯原理中,說的是使用堆棧。
讓我把它變得簡單。
程序中有兩個堆棧,壹個用於存放值,另壹個用於存放操作符。
程序啟動後,第壹個操作符和數值首先被放入堆棧。
獲取下壹個操作符下壹個操作
比較NextOP和棧頂操作符之間的優先級。
案例1。如果NextOP的優先級高於棧頂的運算符,則將NextOP壓入運算符棧。繼續步驟b。
案例二。如果優先級為2。NextOP低於棧頂運算符,使用棧頂運算符,用數值棧的前兩個值進行運算,運算結果被推入數值棧。重復步驟C,如果操作符堆棧為空,則操作結束,步驟d
d運算的結果在值棧中。
分而治之搜索法每次都找到最後壹次操作的符號,深入搜索其左右兩側,直到得到結果。
2.堆棧處理方法小數堆棧和符號堆棧先定義壹個常量數組(判斷運算\堆棧入口\錯誤),然後從左到右依次操作數入堆棧符號和符號堆棧比較運算\堆棧入口\錯誤運算操作從數堆棧中取數並進行以下運算,然後結果進入數堆棧。最終結果在數字堆棧中。