4. 7-1 堆疊概觀 - 特性與應用 堆疊的特性 先進後出 ( First in last out , FILO ) 後進先出 ( Last in first out , LIFO ) 加入元素到堆疊中稱為推入( push ) 自堆疊中取出元素稱為彈出( pop ) 堆疊的應用 cpu 動作 運算式的處理 副程式的呼叫
13. 7-3 運算式的應用 - 中序轉後序之 堆疊處理法 由中序表示法轉換後序表示法的演算步驟 ( 僅需使用堆疊改變運算子的順序 ) 由左而右 依序取得資料 d i 如果 d i 是運算元 , 直接輸出 如果 d i 是運算子 ( 包含左右括號 ), 則 : 如果 d i = “ ( ”, 放入堆疊 如果 d i = “ ) ” , 依序輸出堆疊中的運算子 , 直到取出 “ ( ” 為止 如果 d i 不是 “ ( ” 或 “ ) ”, 則與堆疊頂點的運算子 d s 作優先順序比較 d i 較 d s 優先時 , d i 放入堆疊 d i 不較 d s 優先或相等時 , d s 輸出 , d i 放入堆疊 如果運算式已經讀取完成 , 而堆疊中尚有運算子時 , 依序由頂端輸出 d s 置入堆疊中 , 必為運算子 d i 較 d s 優先 d s d i 運算元 -- 數字等 d s d i 運算子 -- “(” d s d i 運算子 -- “)” d s ( d s d i 不較 d s 優先或相等 d s
17. 7-3 運算式的應用 - 中序轉前序、堆疊處理法 1. 由右而左 依序取得資料 d i 。 2. 如果 d i 是運算元,直接輸出。 3. 如果 d i 是運算子(含左右括號),則 如果 d i =")" ,放入堆疊 如果 d i ="(" ,依次輸出堆疊中的運算子,直到取出 ")" 為止 如果 d i 不是“ )” 或“ (” ,則與堆疊頂點的運算子 d s 作優先順序比較 d i 較 d s 優先時, d i 放入堆疊,迴圈輸出堆疊資料,直到優先次序相等 d i 不較 d s 優先或相等時, d s 輸出, d i 放入堆疊 4. 如果運算式已讀取完成,而堆疊中尚有運算子時,依序由頂端輸出 。 範例三 若以括號表示法 1+2*(3-4)/2 (1+ ( 2*(3-4) ) /2) 得 +1/*2-342 ( 未加括號時 , 同等順序的運算子以左側為優先 ) (1+2* ( (3-4)/2 ) ) 得 +1*2/-342
18. 7-4 後序表示法求值 由左往右掃描字元,一次取出一個資料 d i 。 如果 d i 是運算元,放入堆疊。 如果 d i 是運算子,依此運算子所需的運算元個數,從堆疊中取出計算,計算結果再放回堆疊。 如果資料處理完畢,取出堆疊的值,即是答案。