![](https://img-blog.csdnimg.cn/direct/bee50b5e5ce54d12820190bed3209e60.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据之美——深度解析数据结构
文章平均质量分 94
在“数据之美——深度解析数据结构”专栏中,我们将一起探索数据结构的奥秘与魅力。本专栏不仅涵盖数组、链表、树、图等基础数据结构,还将深入探讨堆、哈希表等高级数据结构,让您对数据结构有全面而深入的了解。
通过生动的图解、详实的代码示例和丰富的实例分析,我们将帮助您逐步理解数据结构的原理、特性及应用场景
无敌岩雀
内核是引擎,操作系统是汽车
展开
-
布隆过滤器:基于哈希函数的原理、应用解析
布隆过滤器(Bloom Filter) 是一种空间效率极高的概率型数据结构,它利用位图和哈希函数来快速判断一个元素是否属于某个集合。布隆过滤器不是传统意义上的过滤器,它不能完整地存储数据,而是以一种紧凑的方式表示数据可能存在的集合。原创 2024-04-01 19:34:53 · 1308 阅读 · 6 评论 -
深入探索位图技术:原理及应用
虽然位图在图形处理中也常被提及,但在此上下文中,我们需要明确区分两种不同类型的“位图”:一种是数据结构中的位图,如上所述,它主要用于数据的高效存储和检索;当我们要标记第n个数据元素是否存在时,我们只需要找到对应的整数(通过n除以32得到整数索引),然后在该整数中找到对应的二进制位(通过n对32取余得到位索引),并将其设置为0或1。在上面的例子中,如果使用一个整型数组来存储集合中的元素,每个整数需要4个字节(假设是32位系统),那么存储1亿个整数需要大约400MB的空间。如果是1,表示该整数存在于集合中;原创 2024-03-31 21:10:18 · 1112 阅读 · 15 评论 -
红黑树进阶:正向与反向迭代器的实现及map、set的封装实践
map和set是两种常见的数据结构,它们分别用于存储键值对和无序集合。红黑树作为一种高效的平衡搜索树,非常适合用于封装这两种数据结构。通过红黑树的特性,我们可以保证map和set在插入、删除和查找操作时的性能稳定且高效。此外,红黑树的有序性也使得map和set在遍历元素时能够按照特定的顺序进行,满足了更多实际应用的需求。迭代器是一种设计模式,它允许我们顺序访问容器中的元素。对于红黑树来说,设计高效的迭代器是实现其封装Map和Set的关键之一。通过迭代器,我们可以方便地遍历红黑树中原创 2024-03-25 18:27:19 · 1206 阅读 · 17 评论 -
从哈希桶角度看 unordered_map 与 unordered_set 的实现
在C++中,当使用等无序容器时,哈希函数起着至关重要的作用。默认的哈希函数对于许多类型都工作得很好,但有时对于自定义类型或特殊需求,默认的哈希函数可能不是最优的,甚至可能导致性能下降或哈希冲突过多。为特定类型设计哈希函数对于自定义类型,需要提供一个哈希函数,该函数接受自定义类型的对象作为参数,并返回一个足够大的整数值。不同的对象尽可能映射到不同的哈希值。相同的对象总是映射到相同的哈希值。哈希函数的计算应该尽可能快。原创 2024-03-19 20:24:48 · 2727 阅读 · 2 评论 -
哈希技术解析:从哈希函数到哈希桶及其迭代器的全面指南
哈希表(Hash Table)是一种非常重要的数据结构,它基于哈希函数将键(Key)映射到值(Value)上,从而实现对数据的快速存储、查找和删除。在哈希表中,数据并不是按顺序存储的,而是根据哈希函数计算出的键的哈希值,确定数据在表中的位置。由于哈希函数的设计使得键与位置之间存在直接对应关系,因此哈希表在查找、插入和删除操作上的平均时间复杂度可以达到O(1),即常数时间复杂度。这使得哈希表在处理大规模数据时具有极高的效率。原创 2024-03-19 18:15:41 · 1411 阅读 · 1 评论 -
深入解析红黑树(RB-Tree):原理、操作及应用
红黑树作为一种自平衡的二叉搜索树,在计算机科学领域中占据着重要的地位。它的设计旨在在维持树的平衡性的同时,保证各种操作的时间复杂度始终稳定在较低水平。红黑树的灵活性和高效性使得它成为众多编程语言和系统实现中不可或缺的数据结构之一。本文将带领读者深入探究红黑树的结构与原理。(c++实现)原创 2024-03-17 20:28:28 · 1717 阅读 · 2 评论 -
深入探索AVL树:优雅的自平衡二叉搜索树
AVL树是一种自平衡的二叉搜索树,其在每个节点上维护一个平衡因子(Balance Factor),用于确保树的高度保持在较低水平( 即保持在O(log n) )从而提高性能。定义每个节点的平衡因子(Balance Factor)是 -1、0 或 1。左右子树高度之差(简称平衡因子)的绝对值不超过1(-1/0/1)。左子树和右子树都是AVL树。// 该节点的左孩子// 该节点的右孩子// 该节点的双亲int _bf;原创 2024-03-12 19:12:49 · 1073 阅读 · 17 评论 -
深入了解二叉搜索树:原理、实现与应用
在计算机科学中,数据结构是构建算法和程序的基础。其中,二叉搜索树(Binary Search Tree,简称 BST)作为一种常见的数据结构,在很多应用中发挥着重要作用。它具有以下特点:每个节点最多有两个子节点,左子节点的值小于父节点的值,右子节点的值大于父节点的值。这一特性使得二叉搜索树具有快速的查找、插入和删除操作。原创 2024-03-10 20:12:40 · 1520 阅读 · 37 评论 -
【数据结构】使用C语言实现的栈和队列
接收一个指向栈结构的指针和要插入的元素作为参数。首先释放动态分配的内存,将栈的指针(ps)赋值为NULL,容量(capacity)和栈顶(top)都设为0。函数返回栈的top成员变量的值,即栈中元素的个数。它将栈的指针(ps)赋值为NULL,容量(capacity)为0,栈顶(top)为0。这段代码实现了一个动态扩容的栈,可以方便地进行入栈、出栈、获取栈顶元素等操作,并且具备栈空判断和销毁栈的功能。获取栈中有效元素个数(StackSize):该函数返回栈中有效元素的个数,即栈的栈顶位置(top)。原创 2023-08-07 20:28:09 · 103 阅读 · 0 评论 -
【排序详解】TOP-K问题与基于完全二叉树的堆排序
然后判断选定的子节点的值是否小于父节点的值,如果是,则交换两个节点的值,并更新parent和child的值继续向下调整,直到到达叶子节点或不需要再进行交换。一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。3、用剩余的N-K个元素依次与堆顶元素来比较,不满足则替换堆顶元素将剩余N-K个元素依次与堆顶元素比完之后,堆中剩余的K个元素就是所求的前K个最小或者最大的元素。原创 2023-09-24 21:11:07 · 85 阅读 · 1 评论 -
【排序详解】快排、归并、希尔
具体实现中,每次循环时,对于当前的gap,从左到右将相邻的两个长度为gap的区间进行合并,如果右边区间不足长gap,则将右边区间长度调整为剩余元素个数。快排的思想是任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。当 left 和 right 相遇时,将基准值和 left 指向的元素互换位置,并且此时基准值左侧都是小于它的元素,右侧都是大于它的元素。原创 2023-10-11 21:31:20 · 80 阅读 · 0 评论 -
【排序详解】冒泡、选择、插入
外层循环从索引0开始,依次遍历数组中的元素,内层循环从外层循环位置的下一个索引开始,找到未排序部分的最小元素,并将其索引赋值给变量min。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找最小(大)元素,将其放到已排序的序列的末尾。此算法从小到大排序的基本原理是:每一趟排序讲待排续空间中每一个元素与后一个进行比较,若存在小于关系,则进行冒泡(交换),一趟排序下来以后,待排序空间中的最后一个元素最大。借助从网上流传最广的图片理解。原创 2023-09-18 19:53:51 · 306 阅读 · 0 评论