1. 数组(Array)
- 结构特点:固定大小,内存连续,支持通过索引随机访问。
- 用途:
- 快速查找元素(时间复杂度O(1))。
- 适用于元素个数固定、随机访问需求高的场景,如矩阵、表格数据存储。
2. 链表(Linked List)
- 结构特点:元素通过指针链接,分为单向链表、双向链表和循环链表。
- 用途:
- 动态大小集合,方便插入和删除(时间复杂度O(1))。
- 实现队列、堆栈等动态数据结构。
- 场景:需要频繁插入/删除操作,如浏览器的前进后退功能。
3. 栈(Stack)
- 结构特点:LIFO(后进先出),操作仅限于一端。
- 用途:
- 表达式求值(如四则运算、逆波兰式)。
- 函数调用栈(递归的实现)。
- 场景:语法分析、括号匹配。
4. 队列(Queue)
- 结构特点:FIFO(先进先出),从队尾插入,从队首删除。
- 变种:
- 双端队列(Deque):两端均可插入或删除。
- 优先队列(Priority Queue):按优先级排序的队列。
- 用途:
- 排队系统,如任务调度、消息队列。
- 广度优先搜索(BFS)。
5. 哈希表(Hash Table)
- 结构特点:通过哈希函数将键映射到存储桶,快速查找。
- 用途:
- 快速查找、插入和删除(平均时间复杂度O(1))。
- 实现字典、集合。
- 场景:缓存(如LRU Cache)、唯一性检测。
6. 树(Tree)
- 结构特点:层级结构,节点包含子节点。
- 常见变种:
- 二叉树:每个节点最多两个子节点。
- 二叉搜索树(BST):左小右大,便于快速查找。
- 平衡树(AVL树、红黑树):避免二叉搜索树退化为链表。
- 堆(Heap):完全二叉树,常用于优先队列。
- 字典树(Trie):用于字符串前缀匹配。
- 用途:
- 数据索引(如数据库的B树、B+树)。
- 表达式解析(如语法树)。
- 路径搜索(如文件系统)。
7. 图(Graph)
- 结构特点:由顶点和边组成,分为有向图和无向图。
- 表示方法:
- 邻接矩阵:适合稠密图。
- 邻接表:适合稀疏图。
- 用途:
- 网络流(如社交网络、通信网络)。
- 路径规划(如最短路径算法:Dijkstra、A*)。
- 拓扑排序(如任务依赖关系)。
8. 堆(Heap)
- 结构特点:基于完全二叉树,分为最大堆(父节点大于子节点)和最小堆。
- 用途:
- 优先级调度(如操作系统任务管理)。
- 求Top K问题。
- 场景:实现优先队列。
9. 集合(Set)
- 结构特点:无序且不重复的集合。
- 实现方式:
- 基于哈希表(HashSet)。
- 基于平衡树(TreeSet)。
- 用途:
- 去重操作。
- 交集、并集、差集运算。
10. 字符串相关结构
- 常见结构:
- 字典树(Trie):高效前缀查询。
- 后缀数组/后缀树:字符串匹配与重复子串问题。
- 用途:
- 文本处理(如搜索引擎、DNA序列分析)。
- 字符串压缩和编码。