常用数据结构总结

计算机科学的基础构建模块

数组

线性结构
描述

连续内存空间存储相同类型元素的集合,通过索引访问元素。

时间复杂度
访问 O(1)
搜索 O(n)
插入 O(n)
删除 O(n)
应用场景

基础数据存储、矩阵表示、缓存系统、查找表等。

链表

线性结构
描述

节点通过指针连接的非连续存储结构,包括单链表、双链表和循环链表。

时间复杂度
访问 O(n)
搜索 O(n)
插入 O(1)
删除 O(1)
应用场景

实现栈和队列、内存管理、哈希表冲突解决、浏览器历史记录等。

线性结构
描述

后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。

时间复杂度
压栈(push) O(1)
弹栈(pop) O(1)
查看栈顶(peek) O(1)
搜索 O(n)
应用场景

函数调用栈、表达式求值、括号匹配、浏览器后退功能等。

队列

线性结构
描述

先进先出(FIFO)的数据结构,包括普通队列、双端队列和优先队列等变种。

时间复杂度
入队(enqueue) O(1)
出队(dequeue) O(1)
查看队首(front) O(1)
搜索 O(n)
应用场景

BFS算法、任务调度、消息队列、打印机任务管理等。

哈希表

散列结构
描述

通过哈希函数将键映射到存储位置的键值对集合,提供高效的数据访问。

平均时间复杂度
插入 O(1)
查找 O(1)
删除 O(1)
最坏情况 O(n)
应用场景

字典实现、数据库索引、缓存系统、对象属性存储等。

二叉树

树形结构
描述

每个节点最多有两个子节点的树结构,包括二叉搜索树、平衡二叉树等变种。

时间复杂度(平衡时)
访问 O(log n)
搜索 O(log n)
插入 O(log n)
删除 O(log n)
应用场景

文件系统、数据库索引、表达式树、决策树等。

树形结构
描述

完全二叉树,满足堆性质(最大堆或最小堆),常用于实现优先队列。

时间复杂度
访问最大/最小 O(1)
插入 O(log n)
删除最大/最小 O(log n)
构建堆 O(n)
应用场景

堆排序、优先队列、Dijkstra算法、哈夫曼编码等。

非线性结构
描述

由顶点和边组成的集合,可以是有向或无向的,加权或未加权的。

时间复杂度(邻接表表示)
存储空间 O(V + E)
添加顶点 O(1)
添加边 O(1)
删除顶点 O(E)
删除边 O(1)
应用场景

社交网络、路由算法、推荐系统、依赖关系分析等。

跳表

概率数据结构
描述

多层链表结构,通过随机化方式构建索引,提供类似平衡树的性能。

时间复杂度
搜索 O(log n)
插入 O(log n)
删除 O(log n)
应用场景

Redis有序集合、LevelDB等数据库索引、替代平衡树的场景。

Trie树

树形结构
描述

前缀树或字典树,用于高效存储和检索字符串集合,共享公共前缀。

时间复杂度
插入 O(L)
搜索 O(L)
前缀搜索 O(L)
空间复杂度 O(N*L)
应用场景

自动补全、拼写检查、IP路由、单词游戏等字符串处理场景。