1、後序表示式求值:
後續表示式(逆波蘭式)的特點:沒有括號。
求值方法:
從前向後掃,
遇到運算元壓棧;
遇到操作符,從棧中取出2個運算元運算,結果壓棧。
最終棧中所剩的數為結果。
2、中序表示式求值
我們先來定義運算子的優先順序:
(+,-
*,/,%
從上到下依次公升高
準備2個棧,乙個專門存放運算子,另乙個專門存放運算元。
1.遇到),那麼退棧計算到(為止.結果壓棧。
2.遇到運算數.那麼壓棧。
3.如果當前運算子優先順序低於棧頂運算子.那麼計算棧頂運算子並將結果壓棧.
4.否則壓棧.
計算帶括號和浮點數的表示式:
將中序表示式轉換成後序表示式(逆波蘭表示式)的演算法:
(1)初始化乙個空的運算子棧
(2)在沒有到達中綴表示式的結尾及沒有發生錯誤的時候,執行以下步驟:
1.獲取表示式中的乙個標記(常數、變數、算術運算子,左括號,右括號)。
2.如果標記是:
i. 乙個左括號,將其壓入棧中
ii. 乙個右括號,連續彈出並顯示棧中的元素,直到遇到乙個左括號,不要顯示這個左括號。(如果直到棧為空還沒遇到乙個左括號,則是乙個錯誤)
iii.乙個運算子,如果棧為空,或者標記具有比棧頂元素更高的優先順序,則將其壓入棧中。否則出並顯示棧頂的元素,接著繼續比較標記和新的棧頂元素。(運算子比左括號的優先順序高)
iv 乙個運算元,顯示它
(3)當到達中綴表示式的結尾時,彈出並顯示棧中的元素直到棧為空為止。
參考**:
字串表示式轉化為二叉樹:
棧 二叉樹 表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入 輸入...
表示式 表示式樹 表示式求值
總時間限制 1000ms 記憶體限制 65535kb 描述 眾所周知,任何乙個表示式,都可以用一棵表示式樹來表示。例如,表示式a b c,可以表示為如下的表示式樹 a b c 現在,給你乙個中綴表示式,這個中綴表示式用變數來表示 不含數字 請你將這個中綴表示式用表示式二叉樹的形式輸出出來。輸入輸入分...
中綴表示式轉二叉樹
關於中綴表示式轉二叉樹,其實很簡單,只要記住這幾句話就夠了 就這麼簡單 這樣說可能還有人聽不懂 舉個栗子 a b c d e fa b c d e f a b c d e f從左到右遍歷表示式,找到最後計算的字元 分成3部分 a b c d e f 分為左子樹,根,右子樹 再繼續把每個拆分成三部分,...