
数据结构
文章平均质量分 88
南川琼语
这个作者很懒,什么都没留下…
展开
-
算法——希尔排序
希尔排序是一种基于插入排序的排序算法,也被称为缩小增量排序。它通过将待排序的数组分割成若干个子序列,对子序列进行排序,然后逐步合并这些子序列,最终得到一个有序的数组。希尔排序的特点是可以通过设置不同的增量序列来改变算法的效率,通常选择的增量序列是经过优化的递减数列。希尔排序的时间复杂度取决于增量序列的选择,通常为O(n log n)到O(n^2)之间。这种排序算法由Donald Shell于1959年提出并命名。原创 2025-04-16 15:19:50 · 676 阅读 · 0 评论 -
算法——直接插入排序
直接插入排序是一种简单直观的排序算法,其基本思想是将一个元素插入到已经排好序的部分数组中,使得插入后的数组仍然保持有序。具体实现时,从第二个元素开始依次将元素插入到已排序部分的合适位置,直到所有元素都被插入完成,从而达到排序的目的。简而言之,每一趟从待排序序列中取第一个值,将其插入到已排序好的序列,对已排序好的序列,从右向左依次和待插入值比较,如果大于则向后挪动,如果发现了一个小于等于插入值的值,或者触底,则插入到其后。原创 2025-04-16 15:04:26 · 423 阅读 · 0 评论 -
数据结构——布隆过滤器
布隆过滤器是一种空间效率高、适合快速检索的数据结构,用于判断一个元素是否可能存在于一个集合中。它通过使用多个哈希函数和一个位数组来表示集合中的元素。当一个元素被加入到布隆过滤器中时,会通过多个哈希函数计算出多个哈希值,并在对应的位上标记为1;当判断一个元素是否在集合中时,同样会通过多个哈希函数计算出多个哈希值,并检查对应位的值,只有当所有哈希值对应的位都为1时,才会判断可能存在于集合中。布隆过滤器具有较高的空间效率和查询速度,但也存在一定的误判率,即可能将不在集合中的元素误判为存在于集合中。原创 2025-04-15 22:08:57 · 977 阅读 · 0 评论 -
哈希扩展——一致性哈希
一致性哈希是一种哈希算法,用于将数据分布到不同的节点或存储区域,而保持数据的一致性和均衡性。在分布式系统中,一致性哈希通常用于解决负载均衡和数据分布的问题。一致性哈希的基本原理是将数据的键通过哈希函数映射到一个固定的哈希空间中。然后,将这个哈希空间分布到环形的哈希环上。每个节点或存储区域在哈希环上占据一个位置,称为虚拟节点或者物理节点。当需要存储或查找数据时,通过哈希函数计算数据的哈希值,并沿着哈希环顺时针寻找距离最近的节点。原创 2025-04-14 21:55:02 · 915 阅读 · 0 评论 -
算法——基于C语言的基数排序
基数排序是一种非比较排序算法,它将整数按照个位、十位、百位等位数进行排序。基数排序的主要思想是先按照最低位进行排序,然后依次按照高位进行排序,直到最高位,从而得到最终有序的序列。基数排序的时间复杂度为O(d*(n+r)),其中d为最大位数,n为元素个数,r为基数(0-9为10进制时r为10)。基数排序适用于位数较小、取值范围较小的整数排序,但对于位数较大的数字或负数排序则不太适用。原创 2025-04-12 15:04:51 · 279 阅读 · 0 评论 -
数据结构——哈希技术及链地址法
哈希(Hash)是一种将任意长度的输入数据通过哈希算法转换成固定长度(通常是固定长度的字符串)输出的过程。哈希算法通常会将输入数据映射为一个固定长度的字符串,这个字符串通常称为哈希值或摘要。也就是说,我们只需要通过某个函数f ,使得存储位置=f(关键字),那么我们可以通过查找关键字不需要比较就可以获得需要记录的存储位置。输入数据相同,输出的哈希值必定相同。不同的输入数据,哈希值是独立的,即不会有冲突。哈希值的长度是固定的,不会随输入数据的长度变化而变化。原创 2025-04-10 12:07:51 · 718 阅读 · 0 评论 -
数据结构——循环队列
循环队列是一种基于数组的队列实现方式,它通过在数组中固定的位置上循环使用空间来实现队列的功能。循环队列有一个固定的容量,当队列满时,新元素可以覆盖掉队列头部的元素,从而实现循环利用空间。循环队列有两个指针,一个指向队列头部,一个指向队列尾部,通过这两个指针的移动,实现队列的入队和出队操作。循环队列解决了普通队列在出队操作时需要移动大量元素的问题,使得入队和出队的时间复杂度都为O(1)。原创 2025-03-25 22:15:05 · 701 阅读 · 0 评论 -
数据结构——链栈
链栈是一种使用链表实现的栈。链栈不同于数组实现的栈,链栈的元素没有固定的位置,它们通过指针连接在一起。链栈通常由一个头节点和若干个数据节点组成,每个数据节点包含一个数据元素和一个指向下一个节点的指针。在链栈中,栈顶元素始终位于链表的头部,入栈和出栈操作都是在链表头部进行的。动态扩展:由于链栈使用链表实现,可以根据需要动态地增加或减少存储空间。灵活性:链栈的元素没有固定位置,可以随时插入或删除元素,不会浪费空间。容量受限于内存:链栈的容量受限于内存大小,可以根据需要存储大量元素。原创 2025-03-25 17:22:58 · 526 阅读 · 0 评论 -
数据结构——顺序栈
顺序栈是一种基于数组实现的栈结构,其特点包括:栈元素只能从栈顶入栈和出栈,即后进先出(LIFO)的特性。在顺序栈中,栈顶指针始终指向栈顶元素的位置。插入和删除操作的时间复杂度都是O(1)。适用场景:当需要快速对数据进行入栈和出栈操作时,顺序栈是一个较为高效的数据结构。在需要实现逆序操作的场景下,可以使用顺序栈来实现。总的来说,顺序栈适用于需要高效的入栈和出栈操作,并且对于存储元素个数有一定预估的情况下。原创 2025-03-19 06:06:30 · 1068 阅读 · 0 评论 -
数据结构——双向链表dlist
双向链表是一种链表数据结构,其每个节点包含两个指针域,分别指向前一个节点和后一个节点,这使得双向链表可以在任意位置插入或删除节点,而不需要像单向链表那样需要遍历整个链表找到目标位置。这种结构允许双向遍历,即可以从前向后或从后向前访问链表中的节点。由于每个节点包含两个指针域,所以双向链表通常比单向链表占用更多的内存空间。原创 2025-03-19 03:56:01 · 923 阅读 · 0 评论 -
数据结构——单循环链表clist
单循环链表的定义单循环链表是单链表的一种特殊形式。单链表中,每个节点包含数据域和指向下一个节点的指针域,链表的最后一个节点的指针域指向 None。而单循环链表中,最后一个节点的指针域不再指向 None,而是指向链表的头节点,形成一个首尾相连的环。单循环链表的特点优点①循环访问:可以从任意节点开始,沿着链表循环遍历所有节点。这在一些需要周期性操作的场景中非常有用,因为无需每次都从头节点开始遍历。②插入和删除操作灵活:在已知某个节点。原创 2025-03-19 02:55:08 · 564 阅读 · 0 评论 -
数据结构——单链表LinkList
单链表(LinkList)只需要数据域和一个指针域。数据域的类型是待存储数据的类型,这里为了使链表更具有普遍性,则使用typedef对类型重命名。指针域要存放的是下一个节点的地址,因此它的类型是一个结构体类型的指针,对于结构体指针也需要重命名,将Node* 重命名为*PNode。//单链表有效结点的结构体设计//数据域(存储有效数据)//指针域(存储下一个有效结点的地址)原创 2025-03-19 00:58:29 · 675 阅读 · 0 评论 -
线性表的顺序存储结构——可扩容的顺序表
线性表的顺序储存又称顺序表概念:用一组地址连续的存储单元依次存储线性表中的数据元素的线性表。特点:表中的元素逻辑顺序和物理顺序相同。2. 顺序表的优缺点及适用场景优点:1.空间利用率高2.支持随机访问3.尾部插入或删除效率极高缺点:1.头插、按位置插入或删除(搬动数据)2.增容代价比较大适用场景:适用于需要大量随机访问操作,并且增加/删除数据操作较少,或者就算操作多也是在尾部进行。原创 2025-03-18 22:28:45 · 747 阅读 · 0 评论