不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:(2 + 1) * 3 , 即2 1 + 3 *很好理解,就是乙個符號只對其前面兩個數作用
如a+b*(c−d)−e/f
這是怎麼搞出來的呢??
選最靠中的那個優先順序最低的符號開始(±),把算數式分為2個部分,若符號數大於二,樹的左兒子是左邊的符號,右兒子是右邊的符號,若符號不夠兩個,那麼就把數字或字母放在相應的位置。然後又在這兩個部分裡進行同樣的操作。
然後,樹建好之後,對它進行一次後序遍歷,將每個節點的值寫出即可。
什麼是後序遍歷?就是先遍歷左子樹,再遍歷右子樹,最後遍歷根節點的一種遍歷順序。
相應的有:
中序遍歷(先遍歷左子樹,然後訪問根結點,最後遍歷右子樹),可以得到相應的中綴表示式(就是一般算數式)
前序遍歷(先訪問根結點然後遍歷左子樹,最後遍歷右子樹),字首表示式(將運算子寫在前面,運算元寫在後面的表示式,也叫波蘭式)
於是a+b*(c−d)−e/f的字尾表示式就是abcd-*+ef/-
字首表示式就是-+a*b-cd/ef(字首表示式在不確定中綴表示式的情況下不唯一)
當中綴表示式和字首表示式確定時才可以確定字尾表示式,同理,當中綴表示式和字尾表示式確定時才可以確定字首表示式
還有一種用棧的方式,直接給鏈結了:
原表示式轉換為字尾表示式
中綴表示式轉換字尾表示式
中綴表示式是最自然 最易被人類理解的表達方式,但是計算機處理起來並不顯得方便,這時,字尾表示式就發揮作用了 例如 計算表示式 a b c d 的值,程式裡需要不斷的判斷運算子的優先順序,先計算括號裡的子表示式 假如我們將上述表示式轉換為字尾表示式 a b c d 你會發現現在是不需要括號了 這時我們...
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
中綴表示式和字尾表示式
一 中綴表示式如何轉成字尾表示式?中綴表示式 符合人類閱讀 字尾表示式 符合計算機運算 1 遍歷中綴表示式中的數字和符號 2 對於數字 直接輸出 3 對於符號 左括號 進棧 運算符號 與棧頂符號進行優先順序比較 若棧頂符號優先順序低 此符號進棧 預設棧頂若是左括號,則左括號優先順序最低 若棧頂符號優...