1 / 81

第 四 章 -

第 四 章 -. 堆疊. 第四章堆疊. 4-1 堆疊觀念 4-2 堆疊實作 4-3 堆疊應用-函數的呼叫與返回 4-4 運算式求值 4-5 專題研究-騎士巡邏. 4-1 堆疊觀念. 特殊的串列 新增、刪除都在固定的一端,稱為頂端 後進先出 堆疊運算 推入 取出 空堆疊判斷 堆疊滿溢判斷. 推入- push. 取出- pop. 4.2 陣列實作. 陣列 程式撰寫容易 靜態資料處理-空間固定. 4.2.1 堆疊產生. 配置一個陣列空間 變數宣告 stack[] 儲存資料所需之陣列空間 top 記錄資料新增位置

saddam
Download Presentation

第 四 章 -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章- 堆疊 資料結構 in C

  2. 資料結構 in C

  3. 第四章堆疊 • 4-1堆疊觀念 • 4-2堆疊實作 • 4-3堆疊應用-函數的呼叫與返回 • 4-4運算式求值 • 4-5專題研究-騎士巡邏 資料結構 in C

  4. 4-1 堆疊觀念 • 特殊的串列 • 新增、刪除都在固定的一端,稱為頂端 • 後進先出 • 堆疊運算 • 推入 • 取出 • 空堆疊判斷 • 堆疊滿溢判斷 資料結構 in C

  5. 推入-push 資料結構 in C

  6. 取出-pop 資料結構 in C

  7. 4.2 陣列實作 • 陣列 • 程式撰寫容易 • 靜態資料處理-空間固定 資料結構 in C

  8. 4.2.1 堆疊產生 • 配置一個陣列空間 • 變數宣告 • stack[] • 儲存資料所需之陣列空間 • top • 記錄資料新增位置 • 代表陣列中之資料總數 • N • 記錄陣列大小 資料結構 in C

  9. 產生一個含20個整數的陣列堆疊 資料結構 in C

  10. 資料推入 • 新資料儲存到 top 所指的位置 • top 值加 1,表示往上移動 資料結構 in C

  11. 資料推入 資料結構 in C

  12. 資料推入 資料結構 in C

  13. 教學重點 C 允許程式師將上述二個敘述合併成: stack[top++] = data; 其執行的結果事先將data 存入stack[top] 的位置,再對top 的值加1。 資料結構 in C

  14. 資料取出 • top 值減 1 • 取出並傳回 top 所指位置的資料 資料結構 in C

  15. 資料取出 資料結構 in C

  16. 資料取出 資料結構 in C

  17. 教學重點 上述二個敘述合併成: return stack[--top]; top 的值會先減1,再將stack[top] 的值傳回。 資料結構 in C

  18. 堆疊滿溢判斷 • top 值等於 N 資料結構 in C

  19. 教學重點 上述if 敘述可以改寫成: return top == N; top 的值如果等於N,則top == N的運算結果為 TRUE,所傳回值為TRUE;否則運算和傳回的 結果為FALSE 資料結構 in C

  20. 空堆疊判斷 • 頂端變數 top 即是資料總數 • top 值等於 0,表示空堆疊 資料結構 in C

  21. 空堆疊判斷 資料結構 in C

  22. 教學重點 上述if 敘述可以改寫成: return top == 0; 資料結構 in C

  23. 程式範例 推入N+1筆資料 取出N+1筆資料 資料結構 in C

  24. 指標參照實作 • 指標參照 • 程式較為複雜 • 動態資料處理-空間彈性 資料結構 in C

  25. 堆疊產生 • 定義一個堆疊的節點結構(STK_NODE) • data:記錄堆疊資料所需之資料欄位 • next:記錄下一個節點位置之指標參照 資料結構 in C

  26. 堆疊節點結構 資料結構 in C

  27. 堆疊產生 • 宣告一個初值為 NULL 的頂端變數 top • void createSTK • { • top = NULL; • } 資料結構 in C

  28. 資料推入 • 推入第一筆資料 資料結構 in C

  29. 資料推入 • 推入第二筆以後的資料 資料結構 in C

  30. 資料推入 push() • void push(int data) • { • STK_NODE *new_node; • node.next=(STK_NODE *)malloc(sizeof(STK_NODE)) • new_node->data = d; • new_node->next = top; • top = new_node; • } 1 2 3 4 5 6 7 8 資料結構 in C

  31. 資料取出 資料結構 in C

  32. 資料取出 • 取出堆疊頂端資料 1 int pop() 2 { 3 STK_NODE *t = top; 4 int data = top->data; 5 top = top->next; 6 free(t); 7 return(data); 8 } 資料結構 in C

  33. 堆疊已空判斷 • 判斷頂端變數 top 值是否等於 null 1 int isEmpty() 2 { 3 if (top == NULL) 4 return 1; 5 else 6 return 0; 7 } 資料結構 in C

  34. 4-3堆疊應用-函數的呼叫與返回 • 函數呼叫 當程式執行到遇到由函數名稱所組成的敘述時,就會跳到該函數的第一行繼續執行 • 函數返回 等到該函數執行到return敘述時,就會跳回函數呼叫的下一行 資料結構 in C

  35. 程式範例 資料結構 in C

  36. 程式在main()內執行 top → 關於main()的活動紀錄 資料結構 in C

  37. main()呼叫a() top → 關於a()的活動紀錄 資料結構 in C

  38. a()呼叫b() top → 關於b()的活動紀錄 資料結構 in C

  39. b()呼叫c() top → 關於c()的活動紀錄 資料結構 in C

  40. 4-4運算式求值 • 運算式的組成 • 運算元 • 運算子 • 左右括號 • 1 * 2 + 3 * (4 + 5) 資料結構 in C

  41. 運算式的表示式 • 中序運算式 • 運算子放在二運算元之中 • 1 + 2 • 前序運算式 • 運算子放在二運算元之前 • + 1 2 • 後序運算式 • 運算子放在二運算元之後 • 1 2 + 資料結構 in C

  42. 資料結構 in C

  43. 中序轉後序 • 將運算子移至二運算元的後面,運算元順序維持不變 • 依運算子之優先序,逐一轉換 • 1 + 2 * (3 + 4) • 1. 1 + 2 * 3 4 + • 2. 1 + 2 3 4 + * • 3. 1 2 3 4 + * + 資料結構 in C

  44. 中序轉後序-完全括號法 • 將運算子和其運算元加上一組括號 • 將運算子移至對應的右括號 • 刪去所有的左右括號 • 1 * 2 + 3 * (4 + 5) • 1 2 * 3 4 5 + * + 資料結構 in C

  45. 資料結構 in C

  46. 中序轉前序-完全括號法 • 將運算子和其運算元加上一組括號 • 將運算子移至對應的左括號 • 刪去所有的左右括號 • 1 * 2 + 3 * (4 + 5) • + * 1 2 * 3 + 4 5 資料結構 in C

  47. 中序轉後序演算法 • 1.從中序式字串由左至右,一次讀入一個字元,放到變數 ch 中,執行步驟 2 ~ 4 • 2.運算元處理 • 如果 ch 是一個運算元,直接輸出到後序式字串中 • 3.括號處理: • 3.1 如果 ch 是左括號 ,直接推入堆疊中。 • 3.2 如果 ch 是右括號 ,重複取出堆疊中的運算子,並輸出到後序式字串中,直到左括號出現為止。 資料結構 in C

  48. 中序轉後序演算法(續) • 4. 運算子處理: • 4.1 如果目前是空堆疊,直接將 ch 推入堆疊 • 4.2 如果不是空堆疊,假設頂端運算子為 op • 4.2.1 如果 ch 的優先序小於等於 op 的優先序,取出 op 並存入後序式字串,回到步驟 4.1 • 4.2.2 將 ch 推入堆疊中 • 5.最後,取出堆疊中的運算子,存入後序式字串,直到堆疊已經空了為止 資料結構 in C

  49. 中序轉後序的堆疊變化 資料結構 in C

  50. 資料結構 in C

More Related