Please enable JavaScript.
Coggle requires JavaScript to display documents.
資料結構(Data Structure), Link Title - Coggle Diagram
資料結構(Data Structure)
串列(List)
常見操作與演算法
串列反轉演算法 (List Reversal)
迭代法 (Iterative Approach)
遞迴法 (Recursive Approach)
鏈結串列的節點操作演算法
頭部插入
尾部插入
指定位置插入/刪除
串列基礎操作
set_item(L, i, e)
append(L, e)
get_item(L, i)
insert(L, index, e)
實際應用案例或生活中的例子
插入排序法 (Insertion Sort)
凱薩密碼 (Caesar Cipher)
遊戲高分榜 (Game High Scores)
圓桌公平排程 (Round-Robin Scheduling)
不同資料結構之間的關聯性
陣列(Array) vs. 鏈結串列(Linked List)
陣列使用集中、連續的記憶體;鏈結串列則使用分散的節點
陣列支援 O(1) 按索引存取,但插入與刪除需要搬移元素,成本為 O(n)
鏈結串列按索引存取需要遍歷,成本為 O(n),但在已知節點位置插入或刪除只需修改指針,成本為 O(1)
Stack(堆疊)與 Queue(隊列)
Stack 在 Head 進行 Push 與 Pop,所有操作皆為 O(1)
各單元實作 Lab 中學到的內容與心得
凱薩密碼加解密實作
鏈結串列(Linked List)底層純手工實作
Rich 終端機美化套件應用
各主題的基本定義與特性
陣列與循序結構 (Array-Based Sequences)
低階陣列 (Low-Level Array)
參照陣列 (Referential Array)
緊湊陣列 (Compact Array)
動態陣列 (Dynamic Array)
鏈結串列 (Linked List)
由多個節點(Node)組成的線性資料結構,節點在記憶體中是不連續的,透過指標(Pointer)相互串聯
抽象資料型態 (Abstract Data Type, ADT)
ADT 是一種對資料型態的邏輯性描述,它只定義了資料結構「做什麼」(介面/API),而不涉及底層「怎麼做」(實作)
樹狀結構(Tree)
各主題的基本定義與特性
Sibling(兄弟節點):擁有相同父節點的節點
Ancestors/Descendants(祖先/後代):描述節點間的間接關係
Leaf(葉節點):沒有子節點的節點
Depth(深度):從根節點到該節點的邊數
Parent/Child(父/子節點):直接相連的上下層關係
Height(高度):從該節點到最深葉節點的最長路徑邊數
Root(根節點):樹的最頂層節點,沒有父節點
不同資料結構之間的關聯性
與陣列或串列(Linked List)不同,樹能以階層方式組織資料,而非一維順序
當二元搜尋樹(BST)插入的資料順序是嚴格遞增或遞減時,樹會失去平衡,退化成類似串列的線性結構,導致搜尋效率降至 O(n)
常見操作與演算法
插入
刪除
搜尋
遍歷 (Traversal)
遍歷 (Traversal)深度優先搜尋 (DFS)
廣度優先搜尋 (BFS)
實際應用案例或生活中的例子
呈現公司或團體的上下隸屬關係
以階層式架構表示網頁的標籤與屬性
根目錄為 Root,子目錄為分枝,檔案為葉節點
各單元實作 Lab 中學到的內容與心得
Python中用bigtree進行樹的建構
樹狀結構中需先釐清父子觀係
陣列實作適合完全二元樹,透過 2i+1 與 2i+2 的規則定位子節點,雖然節省空間管理成本但需連續記憶體
了結如何維持樹狀結構的整潔姓
進階樹狀結構(Advanced Tree Topics)
常見操作與演算法
Kruskal's 演算法
將所有邊排序,並利用 Cycle Detection 逐一過濾邊
AVL 樹的動態平衡調整
LL 旋轉
RR 旋轉
LR 旋轉
RL 旋轉
Prim's 演算法
維護一個 mstSet 紀錄已加入點,並動態更新鄰接頂點的最小權重
堆積(Heap)的核心操作
insert()(插入)
extractMin() / remove()(移除根節點)
getMin()(取得極值)
實際應用案例或生活中的例子
急診室的檢傷分類( triage )
作業系統的任務排程器(Task Scheduler)
電力公司要在多個城鎮或用戶之間鋪設低壓電纜
在需要支援大量即時搜尋、且資料經常動態變動的大型系統中
電信商要佈置光纖網路
不同資料結構之間的關聯性
圖 (Graph) 與 樹 (Tree) 的轉化
最小生成樹(MST)是從複雜的「加權圖」中精煉出來的「樹狀子圖」 。圖本身允許環的存在,但透過演算法約束,挑選出連接所有點且不含環的子集,即轉化成了樹
堆積 (Heap)、優先佇列 (Priority Queue) 與 Prim's 演算法的交織
堆積是優先佇列最常見且最高效的底層實作方式,能在 O(1) 時間內取得最優先元素(如最小值),並在 O(log n) 內完成動態調整
在 Prim's 演算法中,為了快速找出目前與 MST 相連且權重最小的邊,會使用優先佇列(Min-Heap)來管理所有候選頂點的距離 。若不用堆積(如採用鄰接矩陣暴力搜尋),時間複雜度為 O(V^2)
各單元實作 Lab 中學到的內容與心得
善用現善用現成高階函式庫與底層原理的對照成高階函式庫與底層原理的對照
指針操作的嚴謹性與邊界條件控制
因地制宜的演算法選擇思維
各主題的基本定義與特性
Kruskal's 演算法(克魯斯卡爾演算法)
以「邊(Edges)」為核心出發。起初將所有邊依照權重從小到大排序,接著依序挑選權重最小的邊加入,並在過程中檢測是否會與已選的邊形成環(通常搭配 Disjoint-Set/Union-Find 資料結構),若不形成環則保留,直到連接所有頂點
AVL 樹(平衡二元搜尋樹)
任一節點的平衡因子(BF = 左子樹高度 - 右子樹高度)必須介於 -1 到 1 之間
Prim's 演算法
以「頂點(Nodes)」為核心出發。從圖中任意挑選一個起點加入 MST 頂點集合,隨後不斷尋找「已加入頂點」與「未加入頂點」之間權重最小的邊,並將新頂點納入,直到涵蓋所有點
堆積 (Heap)
除最後一層外,其餘各層均完全填滿,且最後一層的節點皆靠左排列,這使其非常適合以連續陣列(Array)形式儲存,不浪費記憶體空間
最小生成樹 (Minimum Spanning Tree, MST)
在一個連通且無向的加權圖中,選出一個邊的子集,該子集必須能夠連接圖中的所有頂點,且其總邊權重達到最小
表格式資料結構(Table-like Structures)
常見操作與演算法
集合操作
union()
intersection()
remove() / discard()
add()
difference()
issuperset() / issubset()
字典與進階容器操作
雜湊表核心演算法與碰撞處理(Hash Collisions)
鏈結法(Chaining)
開放定址法(Open Addressing)
各單元實作 Lab 中學到的內容與心得
程式效能
撰寫更強健(Robust)的防錯程式碼
軟體工程安全
文字資料在投入雜湊計算前必須先進行字串編碼
不同資料結構之間的關聯性
集合與字典的共通性
集合本質上可看作是「只有鍵、沒有值」的特殊雜湊表
與線性結構(List, Tuple)的對比
List 與 Tuple 是基於連續記憶體陣列實現、支援重複元素且嚴格保留索引順序的線性結構
實際應用案例或生活中的例子
過濾重複電子郵件
密碼安全儲存
學生資訊與 JSON 配置檔
庫存追蹤與詞頻統計
資料完整性檢查
各主題的基本定義與特性
集合 (Sets)
無序性
元素不可變性
不可重複性
一種無序(Unordered)且元素唯一(Unique)的資料結構
字典 (Dictionaries)
順序性
快速檢索
可變性
一種儲存「鍵-值對」(Key-Value Pairs)的映射結構,鍵(Key)必須是唯一的
Link Title
影片連結請點擊Link Title