本文目录
这份速查表按抽象数据类型重新分类。原文把对称矩阵、稀疏矩阵列为链表变种,也把 KMP、查找等算法混入数据结构层级,容易造成概念混淆。
| 类别 | 常见实现或变体 | 典型操作与复杂度 |
|---|---|---|
| 动态数组 | Vector、ArrayList | 随机访问 $O(1)$;尾部均摊插入 $O(1)$;中间插删 $O(n)$ |
| 链表 | 单链表、双向链表、循环链表 | 已知节点处插删 $O(1)$;按下标访问 $O(n)$ |
| 栈 | 数组栈、链式栈 | 入栈、出栈、查看栈顶通常为 $O(1)$ |
| 队列 | 循环队列、链式队列、双端队列 | 两端操作依实现可达 $O(1)$ |
| 哈希表 | 链地址法、开放寻址法 | 平均查找/插入/删除 $O(1)$,最坏 $O(n)$ |
| 集合并查集 | Union-Find / DSU | 路径压缩 + 按秩合并后,均摊复杂度接近 $O(1)$ |
| 树 | 二叉树、BST、AVL、红黑树、Trie、B/B+ 树 | 有序平衡树查找/更新通常为 $O(\log n)$ |
| 堆 | 二叉堆、d 叉堆、二项堆、斐波那契堆、配对堆 | 查看极值 $O(1)$;二叉堆插入/删除极值 $O(\log n)$ |
| 图 | 邻接表、邻接矩阵、边集 | 遍历通常为 $O(V+E)$;稠密图可考虑邻接矩阵 |
| 字符串索引 | Trie、后缀数组、后缀自动机 | 用于前缀、子串和字典匹配;KMP/BM 属于匹配算法而非数据结构 |
复杂度只描述增长趋势,实际选择还要考虑缓存局部性、内存开销、数据规模和语言标准库实现。例如小规模数据上,连续数组常因缓存友好而优于理论复杂度相近的指针结构。
觉得有帮助?
分享给同样关注系统性能的人。