什么是计算机程序,曾经有个牛人给我们了一个公式,程序=算法+数据结构,也就说,如果你想要写程序,就需要懂得算法和数据结构,而这两者也是决定一个程序员上限的重要因素,接下来我们就来盘点一下计算机程序中常用的数据结构。
数组
数组是一种数据结构,用于存储相同数据类型的元素集合。数组是索引的,这意味着每个元素都有一个可用于访问它的唯一索引。
链表
链表是一种数据结构,用于在链表中存储元素集合。链表中的每个元素都包含一个指向列表中下一个元素的指针。
堆栈
堆栈是一种数据结构,它按后进先出 (LIFO) 顺序存储元素集合。这意味着最后添加到堆栈的元素将是要从堆栈中删除的第一个元素。
队列
队列是一种数据结构,它按先进先出 (FIFO) 顺序存储元素集合。这意味着首先添加到队列的元素将是要从队列中删除的第一个元素。
树
树是一种数据结构,它按层次结构顺序存储元素集合。树中的每个元素都有一个父元素和零个或多个子元素。
图
图是存储节点和边集合的数据结构。图中的每个节点表示一个对象,每个边表示两个对象之间的关系。
哈希表
哈希表是将键映射到值的数据结构。每个键都映射到一个唯一值,并且可以通过提供键快速检索该值。
跳表
跳表是一种概率数据结构,可用于按排序顺序存储元素集合。对于许多操作,跳表比平衡树更快,但它们对于插入和删除效率不高。
字典树
字典树是一种数据结构,可用于存储字符串集合。每个字符串都存储在树状结构中,树中的每个节点表示字符串中的一个字符。
布隆过滤器
布隆过滤器是一种概率数据结构,可用于测试元素是否为集合的成员。布隆过滤器非常快,但它们可能会有误报率。
线段树
线段树是一种数据结构,可用于存储元素集合并快速查找一系列元素的最小值、最大值或总和。
堆
堆是一种数据结构,可用于按优先级顺序存储元素集合。具有最高优先级的元素始终位于堆的顶部。
不相交集
不相交集是一种数据结构,可用于表示不相交集的集合。不相交集合中的每个集合都有一个唯一的标识符。
联合查找
联合查找是一种数据结构,可用于表示集合的集合。并集查找中的集合可以合并在一起,并且联合查找可用于查找包含给定元素的集合。
二叉搜索树
二叉搜索树是一种数据结构,可用于按排序顺序存储元素集合。二叉搜索树中的每个元素都有一个左子元素和一个右子元素。元素的左子元素必须小于元素,元素的右子元素必须大于元素。
B树
B树是一种数据结构,可用于按排序顺序存储元素集合。B树比二叉搜索树更有效地存储大型元素集合。
RMQ
范围最小查询 (RMQ) 是一种数据结构,可用于查找元素区域中的最小值。
稀疏表
稀疏表是一种数据结构,可用于查找一系列元素中的最小值。对于大范围的元素,稀疏表比 RMQ 更有效。
四叉树
四叉树是一种数据结构,可用于在 2D 空间中存储元素集合。四叉树中的每个元素都存储在空间的正方形区域中,并且空间递归地分为四个较小的正方形。
八叉树
八叉树是一种数据结构,可用于在 3D 空间中存储元素集合。八叉树中的每个元素都存储在空间的立方体区域中,并且空间递归地分为八个较小的立方体。
三元搜索树
三元搜索树是一种数据结构,可用于按排序顺序存储元素集合。三元搜索树中的每个元素都有三个子元素:左子元素、中间子元素和右子元素。元素的左子元素必须小于元素,元素的中间子元素必须等于元素,元素的右子元素必须大于元素。
Van Emde Boas
Van Emde Boas树是一种数据结构,可用于按排序顺序存储元素集合。Van Emde Boas树比二叉搜索树更有效地存储小型元素集合。
斐波那契堆
斐波那契堆是一种数据结构,可用于按优先级顺序存储元素集合。对于需要合并堆的操作,斐波那契堆比二进制堆更有效。
R树
R 树是一种数据结构,可用于在多维空间中存储元素集合。R 树比 k-d 树更有效地存储大量元素集合。
红黑树
红黑树是自平衡二叉搜索树。它是一种二叉搜索树,红黑树是实现需要高效插入和删除操作的数据结构的不错选择。