講師:郭育倫 d95037@csie.ntu.edu.tw 第3章 基本資料結構 講師:郭育倫 d95037@csie.ntu.edu.tw.

Slides:



Advertisements
Similar presentations
1 第八章 深入探討樹狀結構. 2 目次 8.1 m-way 搜尋樹 8.2 B-tree 8.3 動動腦時間 8.4 練習題解答.
Advertisements

总结-图 基础知识 基本方法 2017年3月6日 西南石油大学..
第7章 樹與二元樹 (Trees and Binary Trees)
資料結構 老師:李崇明 助教:楊斯竣.
第一章 導論(Introduction).
Tree (2): heap, deap, 2-3 tree, 2-3-4tree
演算法 陣列 鏈結串列 堆疊與佇列 樹狀結構 搜尋
Chapter 6 樹狀結構.
新世代計算機概論 第15章 資料結構.
Chapter 5 樹狀結構.
Chap4 Tree.
Tree(樹) 什麼是「樹」? 「樹」的範例 「樹」的定義 「樹」的表示法.
Chap5 Graph.
資料結構 第3章 鏈結串列.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置 4-2 鏈結串列的基礎 4-3 單向鏈結串列 4-4 環狀鏈結串列
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
Chapter8 Binary and Other Trees
第11章 資料結構 – 使用C語言的模組 11-1 資料結構的基礎 11-2 C語言的模組化程式設計 11-3 基本鏈結串列
講師:郭育倫 第3章 基本資料結構 講師:郭育倫
第7章 樹與二元樹 (Trees and Binary Trees)
Course 0 課程介紹 Introduction
樹狀結構 Trees.
第12章 樹狀搜尋結構 (Search Trees)
資料結構與C++程式設計進階 鏈結串列 講師:林業峻 CSIE, NTU 6/ 10, 2010.
資料結構 第6章 樹狀結構.
第十五章 Linked List, Stack and Queue
(Circular Linked Lists)
第 14 章 資料結構與演算法.
第 七 章 樹狀結構 課程名稱:資料結構 授課老師:________ 2019/1/1.
資料結構–樹(Tree) 綠園.
學習 2019/1/12. 學習 2019/1/12 Chapter 3 鏈結串列結構 資料結構導論 - C語言實作.
4.1 單向鏈結串列 4.2 堆疊的加入與刪除 4.3 佇列的加入與刪除 4.4 其他型式的佇列
第三章 鏈結串列 3-1  單向鏈結串列 3-2 環狀鏈結串列 3-3 雙向鏈結串列.
鄧姚文 資料結構 第六章:樹(Tree) 鄧姚文
Chapter 9 高度平衡二元搜尋樹 AVL Binary Search Tree
樹狀結構 Tree Structure chapter 7 德明科技大學資訊科技系.
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Chap3 Linked List 鏈結串列.
Chapter 11 B-tree 11.1 m-way 搜尋樹 11.2 B-tree.
第六章 樹狀結構 T r e e 版權屬作者所有,非經作者 同意不得用於教學以外用途.
Ch 3 Dynamic Programming (動態規劃).
樹 2 Michael Tsai 2013/3/26.
感謝同學們在加分題建議. 我會好好研讀+反省~
Chap4 Tree.
資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
Chapter 4 資料結構.
Chapter 4 資料結構.
資料結構 優點 缺點 1 陣列 (Array) 沒有額外變量 (例head, next,...) 運作/操作較簡單 更新資料時,若要保持順序,需要移動較大量資料 靜態結構Static (宣告時已決定了陣列元素多少,不能在程式執行期間增減元素) 2 隊列Queue (FIFO) 容易更新 加入enqueue:
講師:郭育倫 第10章 加權圖 講師:郭育倫
資料結構使用Java 樹(Tree).
Reference to FUNDAMENTALS OF DATA STRUCTURE IN C++
第7章 樹與二元樹(Trees and Binary Trees)
資料結構與C++程式設計進階 樹狀結構(Tree) 講師:林業峻 CSIE, NTU 11/ 12, 2009.
第 八 章 高等樹 課程名稱:資料結構 授課老師:________ 2019/4/28.
資料結構使用Java 第9章 樹(Tree).
Teacher: 郭育倫 Mail: 演算法 Teacher: 郭育倫 Mail:
講師:郭育倫 第10章 加權圖 講師:郭育倫
資料結構使用Java 第6章 鏈結串列(Linked List).
陣列與結構.
Chapter 4 鏈結串列 Linked List 2019/5/14.
動畫演示 Node規範了一些基本的方法,像是增加節點、刪除節點、讓節點做一些事、取得第n個節點等等
6.1 樹狀結構的一些專有名詞 6.2 二元樹 6.3 二元樹的表示方法 6.4 二元樹的追蹤 6.5 引線二元樹 6.6 其它議題
第7章 資料結構 7-1 陣列 7-2 鏈結串列 7-3 堆疊和佇列 7-4 樹狀結構.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
堆積(Heap Tree) 授課老師:蕭志明.
鏈結串列 Link List chapter 6 德明科技大學資訊科技系.
Trees 授課者:驕芸.
10303: How Many Trees? ★★☆☆☆ 題組:Contest Archive with Online Judge
JAVA 程式設計與資料結構 第十七章 Tree.
資料結構 Data Structure (資管二)
Presentation transcript:

講師:郭育倫 d95037@csie.ntu.edu.tw 第3章 基本資料結構 講師:郭育倫 d95037@csie.ntu.edu.tw

演算法導論,探矽工作室 本章學習重點 鏈結串列 堆疊 佇列 二元樹

摘要 程式 v.s. 適當的資料結構 回顧基本資料結構 讓程式容易維護 較高的執行效率 減少額外的記憶體空間 演算法導論,探矽工作室 摘要 程式 v.s. 適當的資料結構 讓程式容易維護 較高的執行效率 減少額外的記憶體空間 回顧基本資料結構 鏈結串列(linked list) 堆疊(stack) 佇列(queue) 二元樹(binary tree)

鏈結串列 陣列 v.s. 鏈結串列 單向鏈結串列 v.s. 雙向鏈結串列 環狀鏈結串列 基本操作 初始化 搜尋(線性時間) 插入 刪除 演算法導論,探矽工作室 鏈結串列 陣列 v.s. 鏈結串列 單向鏈結串列 v.s. 雙向鏈結串列 環狀鏈結串列 基本操作 初始化 搜尋(線性時間) 插入 刪除

演算法導論,探矽工作室 範例:鏈結串列的插入

演算法導論,探矽工作室 範例:鏈結串列的刪除

堆疊 先進後出(first in and last out,FILO) 實作方式 基本操作 陣列 鏈結串列 初始化 判斷狀態(空的?滿的?) 演算法導論,探矽工作室 堆疊 先進後出(first in and last out,FILO) 實作方式 陣列 鏈結串列 基本操作 初始化 判斷狀態(空的?滿的?) 堆入(push) 取出(pop)

演算法導論,探矽工作室 範例:堆疊的 pop & push

佇列 先進先出(first in first out,FIFO) 實作方式 基本操作 陣列 鏈結串列 環狀佇列(ring queue) 演算法導論,探矽工作室 佇列 先進先出(first in first out,FIFO) 實作方式 陣列 鏈結串列 環狀佇列(ring queue) 基本操作 初始化 判斷狀態(空的?滿的?) 放入資料(enqueue) 取出資料(dequeue)

範例:佇列的dequeue & enqueue 演算法導論,探矽工作室 範例:佇列的dequeue & enqueue

演算法導論,探矽工作室 樹 定義 一棵樹t可看成是一個非空的有限元素之集合,每個元素稱為節點(node),其中一個元素稱為根節點(root),或稱為樹根,剩下的元素(如果有的話)組成t的子樹(subtree) 這種包含根節點的樹也稱為有根樹(rooted tree) 節點之間的關係 節點之間的邊線(edge)代表兩者之間的階層關係 父節點(parent)、子節點(children)、兄弟節點(sibling) 沒有任何子節點的節點稱為樹葉(leaf),或稱為葉子 有任何子節點的節點稱為內部節點(internal node)

樹的其它性質 n元樹(multi-way tree) 階層(level) 深度(depth) 高度(height) 演算法導論,探矽工作室 樹的其它性質 n元樹(multi-way tree) 每個節點最多可允許n個子節點 階層(level) 樹根的階層為1,其子節點的階層為2,子節點的子節點為3 … 深度(depth) 樹根到此節點的路徑之長度,也就是經過多少個邊線 高度(height) 此節點到以此節點為樹根的子樹其最遠樹葉路徑的長度

演算法導論,探矽工作室 老王後代的樹狀族譜圖 最多到第3階層 樹的高度為2 節點小洋的深度為2 節點阿昌的高度為1

二元樹 定義 常見的應用 二元樹是樹的一個特例(但是允許是空的) 演算法導論,探矽工作室 二元樹 定義 二元樹是樹的一個特例(但是允許是空的) 每個節點最多只有二棵子樹,有左右之分,分別稱作左子樹(left subtree)和右子樹(right subtree),次序不能顛倒 常見的應用 (二元)堆積 二元搜尋樹

二元樹的特性 包含n個節點的二元樹,剛好有n-1個邊 在一棵二元樹的第i層最多有2i − 1個節點 演算法導論,探矽工作室 二元樹的特性 包含n個節點的二元樹,剛好有n-1個邊 在一棵二元樹的第i層最多有2i − 1個節點 高度為k的二元樹最多有2k+1 − 1個節點,最少有k+1個節點 包含n個節點的二元樹,其高度最大為n-1,最小為log2n

滿二元樹(full binary tree) 演算法導論,探矽工作室 滿二元樹(full binary tree) 一棵二元樹的高度為k且有2k+1 − 1個節點 最底層的節點都是葉子,其它層的節點都有2個子節點 可以對這棵滿二元樹的每個節點,依照由上到下、由左到右的順序,從0到2k+1 − 2進行編號

演算法導論,探矽工作室 高度(深度)為3的滿二元樹

完整二元樹(complete binary tree) 演算法導論,探矽工作室 完整二元樹(complete binary tree) 定義 一棵有n個節點的二元樹,按滿二元樹的編號方式對它進行編號,樹中所有節點和滿二元樹0到n-1編號完全一致 特性 有n個節點,則其深度為log2n 有n個節點,則其高度為h的節點最多有n/(2h+1)個,最少有0個(當n=0時),0 ≤ h ≤ log2n

完整二元樹(續) 深度為k,則它最少有2k個節點,最多有2k+1 − 1個節點。 演算法導論,探矽工作室 完整二元樹(續) 深度為k,則它最少有2k個節點,最多有2k+1 − 1個節點。 對於某個編號為i的節點,0 ≤ i ≤ n-1,則以下關係成立(當然,對滿二元樹也會成立): 若編號i的節點不是樹根,其父節點的編號為(i-1)/2 編號i的節點,其左子節點的編號為i×2+1 編號i的節點,其右子節點的編號為i×2+2

演算法導論,探矽工作室 完整二元樹的範例

二元樹的實作方式 陣列 指標 優點 缺點 每個節點包括鍵值,以及指向左、右子節點的指標 一般二元樹都採用此方法 演算法導論,探矽工作室 二元樹的實作方式 陣列 優點 用數學計算即可得知某節點的父節點、左子節點、右子節點在陣列中的索引值 常用於完整二元樹(e.g.堆積) 缺點 空間的浪費 指標 每個節點包括鍵值,以及指向左、右子節點的指標 一般二元樹都採用此方法

演算法導論,探矽工作室 以陣列表示右傾斜二元樹?

二元樹的操作 配置新節點和初始化 加入節點 刪除節點 調整樹狀結構 搜尋某個鍵值相符合的節點 尋訪(traversal) 演算法導論,探矽工作室 二元樹的操作 配置新節點和初始化 加入節點 刪除節點 調整樹狀結構 搜尋某個鍵值相符合的節點 尋訪(traversal)

演算法導論,探矽工作室 二元樹的尋訪 常見的方法 前序尋訪、中序尋訪、後序尋訪 尋訪過程中,每個節點只會被拜訪(visit)過一次,並在尋訪時執行對該節點的所有運算,因此其時間和空間複雜度都為O(n) 可能的運算 列出所有節點的鍵值 統計節點的個數 刪除所有節點 ….

前序尋訪 void preOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 前序尋訪 void preOrder(NODE *ptr){ if(ptr){ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ preOrder(ptr->left);/* 尋訪左子樹 */ preOrder(ptr->right);/* 尋訪右子樹 */ }

中序尋訪 void inOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 中序尋訪 void inOrder(NODE *ptr){ if(ptr){ inOrder(ptr->left);/* 尋訪左子樹 */ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ inOrder(ptr->right);/* 尋訪右子樹 */ }

後序尋訪 void postOrder(NODE *ptr){ if(ptr){ 演算法導論,探矽工作室 後序尋訪 void postOrder(NODE *ptr){ if(ptr){ postOrder(ptr->left);/* 尋訪左子樹 */ postOrder(ptr->right);/* 尋訪右子樹 */ visit(ptr);/* 處理以ptr為樹根的子樹主體 */ }

演算法導論,探矽工作室 結論 資料結構是儲存與組織資料的一種方式,可用來加速資料的存取與修改 介紹鏈結串列、堆疊、佇列、二元樹