(1)表示式的三種形式:
中綴表示式:運算子放在兩個運算物件中間,如:(2+1)*3;
字尾表示式:不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:21+3*;
字首表示式:同字尾表示式一樣,不包含括號,運算子放在兩個運算物件的前面,如:*+213。
(2)表示式的計算:
由於字尾表示式中沒有括號,不需判別優先順序,計算嚴格從左向右進行,故計算一個字尾表示式要比計算機一箇中綴表示式簡單得多。
將中綴表示式轉換為字尾表示式的演算法思想:
·當讀到數字直接送至輸出佇列中
·當讀到運算子t時,
a.將棧中所有優先順序高於或等於t的運算子彈出,送到輸出佇列中;
b.t進棧
·讀到左括號時總是將它壓入棧中
·讀到右括號時,將靠近棧頂的第一個左括號上面的運算子全部依次彈出,送至輸出佇列後,再丟棄左括號。
運用字尾表示式進行計算的具體做法:
·建立一個棧s
·從左到右讀後綴表示式,讀到數字就將它轉換為數值壓入棧s中,讀到運算子則從棧中依次彈出兩個數分別到y和x,然後以“x運算子y”的形式計算機出結果,再壓加棧s中
·如果字尾表示式未讀完,就重複上面過程,最後輸出棧頂的數值則為結束
(1)表示式的三種形式:
中綴表示式:運算子放在兩個運算物件中間,如:(2+1)*3;
字尾表示式:不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:21+3*;
字首表示式:同字尾表示式一樣,不包含括號,運算子放在兩個運算物件的前面,如:*+213。
(2)表示式的計算:
由於字尾表示式中沒有括號,不需判別優先順序,計算嚴格從左向右進行,故計算一個字尾表示式要比計算機一箇中綴表示式簡單得多。
將中綴表示式轉換為字尾表示式的演算法思想:
·當讀到數字直接送至輸出佇列中
·當讀到運算子t時,
a.將棧中所有優先順序高於或等於t的運算子彈出,送到輸出佇列中;
b.t進棧
·讀到左括號時總是將它壓入棧中
·讀到右括號時,將靠近棧頂的第一個左括號上面的運算子全部依次彈出,送至輸出佇列後,再丟棄左括號。
運用字尾表示式進行計算的具體做法:
·建立一個棧s
·從左到右讀後綴表示式,讀到數字就將它轉換為數值壓入棧s中,讀到運算子則從棧中依次彈出兩個數分別到y和x,然後以“x運算子y”的形式計算機出結果,再壓加棧s中
·如果字尾表示式未讀完,就重複上面過程,最後輸出棧頂的數值則為結束