C 語言**無內建高階容器** (無 `vector`/`map`/`list`/`set`/`dict`),**所有非平凡資料結構都必須用 C 的基礎機制親手構建**:
**不懂 C 機制,資料結構只能停在「圖解/偽代碼」層面;不懂資料結構,C 只能寫「線性腳本」。兩者必須同步練功。**
| 階段 | C 機制重點 | 資料結構重點 | 實作專案 |
|---|---|---|---|
| 1. 入門同步 | 指標算術、結構體、malloc/free、陣列/字串 | 動態陣列 (Vector)、單向鏈表、堆疊/佇列 | 通用 Vector/Stack/Queue 庫 (void* + 比較/複製/銷毀函式) |
| 2. 進階同步 | 雙向鏈表、函式指標、巨集泛型、遞迴、檔案 I/O | 雙向鏈表、雜湊表 (開鏈/開放定址)、二元搜尋樹、堆 (優先佇列) | 通用 HashMap/HashSet、BST/Heap 庫、簡易鍵值存儲 (KV) 持久化到檔案 |
| 3. 專家同步 | 位運算、記憶體對齊、無鎖原子操作、內建函式、鏈接腳本 | 紅黑樹、跳表、B+樹、Trie、並查集、圖 (鄰接表/矩陣)、演算法 (最短路徑/最大流/最小生成樹) | 記憶體分配器 (slab/arena)、LSM Tree KV 引擎、用戶態網路協定棧、資料庫存儲引擎原型 |
| 專案 | C 機制亮點 | 資料結構亮點 |
|---|---|---|
| Redis | SDS 動態字串、dict 漸進式 rehash、非阻塞 I/O、事件迴圈 | 跳表、壓縮列表、雜湊表、集合編碼、流 (Radix Tree) |
| nginx | 記憶體池 (ngx_pool)、鏈表 (ngx_chain)、輸出過濾鏈、共享記憶體區 | 紅黑樹 (ngx_rbtree)、雜湊 (ngx_hash)、數組 (ngx_array)、隊列 (ngx_queue) |
| Linux Kernel | 無侵入鏈表 (list_head)、RCU、IDR/IDA、per-CPU 變數、內建函式 | 紅黑樹 (rb_tree)、Radix Tree/XArray、Interval Tree、優先佇列、B+樹 (btrfs/ext4) |
| SQLite | Pager 快取、WAL、VFS 抽象、編譯期選項 | B+樹 (btree.c)、頁面管理、自由列表、索引覆蓋 |
C 語言是**骨架**,資料結構是**肌肉與神經**。
**同步練功法**:
1. 學一個 C 機制 (如函式指標) → 2. 立即用它實作一個資料結構 (如通用 qsort 比較函式) → 3. 寫測試、跑 Sanitizer、畫記憶體圖 → 4. 閱讀開源同類實作 → 5. 重構優化。
重複此循環,半年後你將擁有「用 C 實作任意資料結構」的肌肉記憶與工程直覺。