README · data-structures
数据结构
数据结构研究的是:信息放在哪里、怎么放、怎么找、怎么改,成本是多少。
对 CS 学生来说,数据结构不是算法题专属知识。编程语言容器、文件索引、数据库索引、缓存淘汰、任务调度、路由表、图搜索,背后都是数据结构。
本模块适合写成的博客问题
| 问题 | 对应章节 |
|---|---|
| 为什么 O(n) 的遍历也会快慢差很多? | 01 复杂度、内存与数据访问成本 |
| 为什么数组查得快,插入却可能慢? | 02 数组与动态数组 |
| 为什么链表画图比背代码更重要? | 03 链表 |
| 为什么队列会让系统“没崩但越来越慢”? | 04 栈与队列 |
| 为什么哈希表平均 O(1),仍然会退化和抖动? | 05 哈希表 |
| 什么时候需要有序结构而不是哈希? | 07 平衡树、红黑树与 B/B+ 树 |
学习路线
| 顺序 | 章节 | 核心问题 |
|---|---|---|
| 00 | 从 0 开始理解数据结构 | 为什么程序需要“组织数据” |
| 01 | 复杂度、内存与数据访问成本 | 为什么同样的逻辑会快慢差很多 |
| 02 | 数组与动态数组 | 为什么连续存储查询快、插入慢 |
| 03 | 链表 | 指针如何把离散节点串起来 |
| 04 | 栈与队列 | 受限访问如何简化问题 |
| 05 | 哈希表 | 哈希查找为什么接近 O(1),又为什么会退化 |
| 06 | 树、二叉树与搜索树 | 层级结构如何支持查找和排序 |
| 07 | 平衡树、红黑树与 B/B+ 树 | 有序索引为什么需要平衡 |
| 08 | 堆与优先队列 | 如何快速拿到最大/最小任务 |
| 09 | 图 | 网络、依赖、路由、社交关系如何建模 |
| 10 | 字符串结构 | 前缀树、KMP、自动机的实用位置 |
| 11 | 位图、布隆过滤器与跳表 | 高性能系统中的空间/概率/层级权衡 |
| 12 | 选型指南 | 面对实际问题时如何选数据结构 |
本模块的固定分析模板
每个结构都按这几层看:
- 存储形态:连续内存、离散节点、树形、图形、桶、位。
- 访问规则:按下标、按 key、按顺序、按优先级、按邻接关系。
- 操作成本:查、增、删、改、遍历、扩容。
- 失效场景:冲突、退化、扩容抖动、内存碎片、并发修改。
- 系统映射:语言容器、文件/数据库索引、缓存、调度、网络路由。
本模块读法
不要把数据结构只当成“算法题模板”。每个结构都要能回答:
数据放在哪里?
靠什么找到它?
修改时要移动什么?
最坏情况下会怎样退化?
它适合连续访问、随机访问、有序访问,还是按关系访问?
真正实用的选型不是背“某结构 O(1)、某结构 O(log n)”,而是把复杂度、内存布局、缓存友好性、更新频率、是否需要有序、是否需要范围查询、是否允许误判这些条件放在一起判断。