CHARLIE SAYS

查理如是说
DATE 2026-08-24
THEME
SERIES / ALGORITHMS / P-050 · 算法与数据结构

算法 001:数据结构基础知识体系详解

对于数据结构这种基础内容,在构建知识体系时要避免自己”再造轮子”,需要站在更高层次整体上去理解它——格局要大一点,不要盯着代码;要了解算法思想、性能及适用场景,用一些工具和别人梳理的结果帮助自己构建知识体系。

学习思路:以”查找”为主线串联知识点

避免孤立地学习知识点,要关联学习。实际应用中我们最常用的是查找排序操作(管理系统、数据库、操作系统里十分常见),以这条线索可以把各种数据结构串联起来:

  • 数组:下标寻址十分迅速,但内存有限、长度有限;无序数组查找最坏要遍历整个数组。二分查找解决了查找复杂度问题,但要求数组有序。数组的死穴是插入、删除操作复杂——在增删查改频繁的场景中不会被优先考虑。
  • 链表:由于它的结构特点,被证明根本不适合查找。
  • 哈希表:数组和链表的折中,设计依赖散列函数;既受数组长度限制、又受链表查找限制,也不适合超大规模查找。
  • 二叉查找树(BST):可能退化成链表,同样不适合查找。
  • AVL 树:解决了退化问题,但旋转过程非常麻烦,插入和删除很慢,构建成本高。
  • 红黑树:平衡二叉树和 AVL 的折中,是比较合适的方案。集合类中 Map、关联数组的高查询效率,底层就是红黑树。
  • 多路查找树:大规模数据存储中实现索引查询的实际背景下,树节点存储元素数量有限,二叉查找树会因树深过大导致磁盘 I/O 过于频繁、查询效率低下。
  • B 树:适用于读写相对大的数据块的存储系统(如磁盘),应用在文件系统及部分非关系型数据库索引。
  • B+ 树:在 B 树基础上为叶子结点增加链表指针(B 树 + 叶子有序链表),所有关键字都在叶子结点中出现,非叶子结点作为索引;总是到叶子结点才命中。常用于关系型数据库(如 MySQL)和操作系统文件系统。
  • B* 树:B+ 树的变体,在非根和非叶子结点再增加指向兄弟的指针,将结点的最低利用率从 1/2 提高到 2/3。
  • R 树:用来做空间数据存储的树状结构,例如给地理位置、矩形和多边形这类多维数据建立索引。
  • Trie 树:自然语言处理中最常用的数据结构,很多字符串处理任务都会用到。Trie 本身是一种有限状态自动机,模式匹配、正则表达式都与它有关。

知识体系结构

A. 数据结构总览

数据结构是基础中的基础,任何进阶都逃不开这些知识点。

B. 线性结构

理解数据结构中的线性结构及其延伸:

  • 线性表:数组和矩阵 —— 数组是连续存储的线性结构,元素类型相同、大小相等,通过整型索引访问元素,尺寸不能改变
  • 线性表:链表 —— n 个节点离散分配、彼此通过指针相连;确定一个链表只需要头指针
  • 线性表(散列):哈希表 —— 通过关键码值直接进行访问的数据结构,映射函数叫散列函数,存放记录的数组叫散列表
  • 线性表:栈和队列 —— 数组和链表是线性存储结构的基础,栈和队列是其应用

C. 逻辑结构:树

D. 逻辑结构:图

延伸专题

本系列后续还覆盖:十大排序算法算法思想(分治/贪心/DP/回溯等)字符串匹配大数据处理

学习资源推荐

入门

进阶

参考文章

目录 Angular 22+ 教程 01:初识 Angular——框架定位与技术选型 →
← 返回文章列表