回覆列表
  • 1 # 丟鍵盤滑鼠

    一.表示式的三種形式: 中綴表示式:運算子放在兩個運算物件中間,如:(2+1)*3 字尾表示式:不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則,如:2 1 + 3 * 字首表示式:同字尾表示式一樣,不包含括號,運算子放在兩個運算物件的前面,如:* + 2 1 3 二.表示式的轉換: 將中綴表示式轉換為字尾表示式的演算法思想: ·數字時,加入字尾表示式; ·運算子: a. 若為最低階的運算子,入棧; b. 若為 "(",入棧; c. 若為 ")",則把棧中的的運算子加入字尾表示式中,直到 "(",從棧中刪除"(" ; d. 若為不是最低階的運算子,則將從棧頂到第一個優先順序不大於(小於,低於或等於)它的運算子(或 "(",但優先滿足前一個條件)之間的運算子加入字尾表示式中,該運算子再入棧;>>這句話不好理解,可以說成這樣,從棧頂開始,依次彈出比當前處理的運算子優先順序高的運算子,直到一個比它優先順序低的或者遇到了一個左括號就停止。·當掃描的中綴表示式結束時,棧中的的所有運算子出棧;運用字尾表示式進行計算的具體做法: ·建立一個棧S ·從左到右讀後綴表示式,讀到數字就將它轉換為數值壓入棧S中,讀到運算子則從棧中依次彈出兩個數分別到Y和X,然後以“X 運算子 Y”的形式計算機出結果,再壓加棧S中 ·如果字尾表示式未讀完,就重複上面過程,最後輸出棧頂的數值則為結束 三.表示式之間的轉換 這裡我給出一箇中綴表示式:a+b*c-(d+e) 第一步:按照運算子的優先順序對所有的運算單位加括號:式子變成拉:((a+(b*c))-(d+e)) 第二步:轉換字首與字尾表示式 字首:把運算子號移動到對應的括號前面 則變成拉:-( +(a *(bc)) +(de)) 把括號去掉:-+a*bc+de 字首式子出現 字尾:把運算子號移動到對應的括號後面 則變成拉:((a(bc)* )+ (de)+ )- 把括號去掉:abc*+de+- 字尾式子出現 發現沒有,字首式,字尾式是不需要用括號來進行優先順序的確定的。如表示式:3+(2-5)*6/3字尾表示式 棧3 +3 +(3 2 +(-3 2 5 - +3 2 5 - +*3 2 5 - 6 +*/3 2 5 - 6 3 +*/3 2 5 - 6 3 / * +

  • 中秋節和大豐收的關聯?
  • 去做銷售還是學技術?