数据结构是数据的"组织方式",直接决定程序的性能与设计。本讲系统梳理数组、链表、栈、队列、哈希表、树、图等核心结构,讲清各自特点与选型原则,让你在真实开发中做出高效决策。
增删改查都用数组硬扛,性能差、代码绕,不知该用哪种结构。
数据多了遍历查不动,不知道用哈希、索引还是树。
会背定义,但讲不清"为什么、什么时候用、有什么坑"。
连续内存、随机访问 O(1),增删需搬移,适合读多写少。
节点串联、增删 O(1),查询 O(n),适合频繁增删。
LIFO/FIFO 特性,用于函数调用、任务调度、缓存淘汰。
O(1) 查找增删,字典/缓存/去重的高效之选。
层级结构,BST/红黑树用于有序数据与索引。
节点关系建模,网络、社交、路径规划。
选型先看复杂度,量级决定性能。
| 结构 | 查找 | 插入 | 删除 | 特点 |
|---|---|---|---|---|
| 数组 | O(1) 随机 | O(n) | O(n) | 读快写慢 |
| 链表 | O(n) | O(1)* | O(1)* | 写快读慢(*已知位置) |
| 哈希表 | O(1) | O(1) | O(1) | 无序、万能之选 |
| 二叉搜索树 | O(log n) | O(log n) | O(log n) | 有序、平衡后稳定 |
| 堆 | O(1) 取极值 | O(log n) | O(log n) | 优先级场景 |
| 跳表 | O(log n) | O(log n) | O(log n) | Redis 有序集合用 |
哈希表(字典):O(1),如用户 ID 查信息。
链表 / 队列:O(1),如消息队列、任务缓冲。
树 / 有序数组 + 二分:O(log n),如排行榜、索引。
栈:如撤销操作、函数调用栈、括号匹配。
堆:如任务优先级、TopK 榜单。
B+ 树让亿级数据查询毫秒级响应。
哈希 + LRU 链表,Redis 等缓存的高效实现。
队列/环形缓冲,解耦异步任务与流量削峰。
图与树的检索,支撑大规模匹配排序。