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选型指南面对实际问题时如何选数据结构

本模块的固定分析模板

每个结构都按这几层看:

  1. 存储形态:连续内存、离散节点、树形、图形、桶、位。
  2. 访问规则:按下标、按 key、按顺序、按优先级、按邻接关系。
  3. 操作成本:查、增、删、改、遍历、扩容。
  4. 失效场景:冲突、退化、扩容抖动、内存碎片、并发修改。
  5. 系统映射:语言容器、文件/数据库索引、缓存、调度、网络路由。

本模块读法

不要把数据结构只当成“算法题模板”。每个结构都要能回答:

数据放在哪里?
靠什么找到它?
修改时要移动什么?
最坏情况下会怎样退化?
它适合连续访问、随机访问、有序访问,还是按关系访问?

真正实用的选型不是背“某结构 O(1)、某结构 O(log n)”,而是把复杂度、内存布局、缓存友好性、更新频率、是否需要有序、是否需要范围查询、是否允许误判这些条件放在一起判断。

延伸阅读