数据结构
数据结构
Aristore线性数据结构
-
数组(Array)
- 实现方式:
- 静态数组:在声明时指定大小,编译器分配固定大小的内存。
- 动态数组:在运行时动态分配内存,如 C++ 中的
std::vector
。
- 特点:固定大小,通过索引访问。
- 应用:基本数据存储、矩阵运算等。
- 实现方式:
-
链表(Linked List)
- 单链表(Singly Linked List):
- 实现方式:每个节点包含数据和一个指向下一个节点的指针。
- 特点:动态大小,通过指针链接节点。
- 双向链表(Doubly Linked List):
- 实现方式:每个节点包含数据和两个指针,分别指向前一个节点和后一个节点。
- 特点:支持双向遍历。
- 循环链表(Circular Linked List):
- 实现方式:最后一个节点的指针指向第一个节点,形成闭环。
- 特点:没有头尾之分,适用于某些循环操作。
- 应用:动态数据存储、内存管理等。
- 单链表(Singly Linked List):
-
栈(Stack)
- 实现方式:
- 数组实现:使用数组模拟栈,通过一个指针记录栈顶位置。
- 链表实现:使用链表模拟栈,通过一个指针指向栈顶节点。
- 特点:后进先出(LIFO)。
- 应用:表达式求值、回溯算法等。
- 实现方式:
-
队列(Queue)
- 普通队列(FIFO):
- 实现方式:
- 数组实现:使用数组模拟队列,通过两个指针分别记录队头和队尾位置。
- 链表实现:使用链表模拟队列,通过两个指针分别指向队头和队尾节点。
- 实现方式:
- 优先队列(Priority Queue):
- 实现方式:通常使用堆(如最大堆或最小堆)实现,支持按优先级出队。
- 双端队列(Deque):
- 实现方式:可以在两端进行插入和删除操作,通常使用双向链表实现。
- 特点:先进先出(FIFO)。
- 应用:任务调度、缓冲区管理等。
- 普通队列(FIFO):
-
向量(Vector)
- 实现方式:
- 动态数组:内部使用一个数组存储元素,当数组满时,动态扩容。
- 特点:动态数组,大小可变。
- 应用:动态数据存储、列表操作等。
- 实现方式:
非线性数据结构
-
树(Tree)
- 二叉树(Binary Tree):
- 实现方式:每个节点包含数据和两个指针,分别指向左子节点和右子节点。
- 二叉搜索树(Binary Search Tree):
- 实现方式:每个节点的左子树只包含比该节点小的值,右子树只包含比该节点大的值。
- 平衡二叉树(Balanced Binary Tree):
- AVL 树:
- 实现方式:每个节点记录其左右子树的高度差,通过旋转操作保持平衡。
- 红黑树(Red-Black Tree):
- 实现方式:每个节点有一个颜色属性(红色或黑色),通过特定规则保持平衡。
- AVL 树:
- 堆(Heap):
- 最大堆(Max Heap):
- 实现方式:每个节点的值大于或等于其子节点的值,通常使用数组实现。
- 最小堆(Min Heap):
- 实现方式:每个节点的值小于或等于其子节点的值,通常使用数组实现。
- 最大堆(Max Heap):
- B 树和 B + 树:
- 实现方式:多路搜索树,每个节点可以有多个子节点,B + 树的所有关键字都在叶子节点上。
- 字典树(Trie):
- 实现方式:每个节点代表一个字符,通过路径表示字符串。
- 后缀树(Suffix Tree):
- 实现方式:每个节点代表一个后缀,通过路径表示字符串的后缀。
- 特点:分层结构,节点间有父子关系。
- 应用:文件系统、数据库索引、字符串匹配等。
- 二叉树(Binary Tree):
-
图(Graph)
- 无向图(Undirected Graph):
- 实现方式:
- 邻接矩阵:使用二维数组表示节点之间的连接关系。
- 邻接表:使用链表或数组存储每个节点的邻接节点。
- 实现方式:
- 有向图(Directed Graph):
- 实现方式:与无向图类似,但边有方向。
- 加权图(Weighted Graph):
- 实现方式:在邻接矩阵或邻接表中存储边的权重。
- 特点:节点通过边连接,表示复杂关系。
- 应用:社交网络、路径规划、网络拓扑等。
- 无向图(Undirected Graph):
其他数据结构
-
哈希表(Hash Table)
- 实现方式:
- 散列表:使用哈希函数将键映射到数组中的索引位置,处理冲突的方法包括链地址法和开放地址法。
- 特点:通过哈希函数将键映射到表中的位置,支持快速查找。
- 应用:字典、缓存、集合操作等。
- 实现方式:
-
跳表(Skip List)
- 实现方式:
- 多层链表:每一层都是一个有序链表,高层链表的节点间隔更大,通过多层索引加速查找速度。
- 特点:通过多层索引加速链表的查找速度。
- 应用:快速查找、排序等。
- 实现方式:
-
布隆过滤器(Bloom Filter)
- 实现方式:
- 位数组:使用一个位数组和多个哈希函数,通过哈希函数将元素映射到位数组中的多个位置。
- 特点:空间效率高,用于测试元素是否属于集合,允许误报但不允许漏报。
- 应用:大数据中的成员测试、缓存过滤等。
- 实现方式:
-
并查集(Disjoint Set / Union-Find)
- 实现方式:
- 路径压缩:通过路径压缩优化查找操作,使查找操作的时间复杂度接近常数。
- 按秩合并:通过按秩合并优化合并操作,保持树的高度较低。
- 特点:用于管理不相交集合,支持高效的合并和查找操作。
- 应用:连通性问题、动态连通性等。
- 实现方式:
-
位图(Bitmap)
- 实现方式:
- 位数组:使用一个位数组,每个位表示一个状态。
- 特点:利用位来表示信息,非常节省空间。
- 应用:内存管理、文件权限管理等。
- 实现方式:
-
空间划分数据结构
- 四叉树(Quadtree):
- 实现方式:将平面区域递归地划分为四个子区域,每个节点最多有四个子节点。
- 八叉树(Octree):
- 实现方式:将三维空间区域递归地划分为八个子区域,每个节点最多有八个子节点。
- kd 树:
- 实现方式:通过交替选择不同的维度进行分割,构建一棵二叉树。
- 特点:用于处理多维空间数据,支持区域查询和碰撞检测。
- 应用:图像处理、计算机图形学等。
- 四叉树(Quadtree):
-
LRU 缓存(Least Recently Used Cache)
- 实现方式:
- 哈希表 + 双向链表:使用哈希表存储键值对,双向链表维护最近使用的顺序,每次访问或插入时更新链表。
- 特点:维护一个最近最少使用的缓存,支持高效的缓存淘汰策略。
- 应用:缓存机制、浏览器历史记录等。
- 实现方式:
评论
匿名评论隐私政策