
#数据结构
文章平均质量分 91
以C语言实现的数据结构与算法
大锦终
此人很神秘 什么都没有留下
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++】位图+布隆过滤器
布隆过滤器优点增加和查询元素的时间复杂度为:O(K), (K为哈希函数的个数,一般比较小),与数据量大小无关哈希函数相互之间没有关系,方便硬件并行运算布隆过滤器不需要存储元素本身,在某些对保密要求比较严格的场合有很大优势在能够承受一定的误判时,布隆过滤器比其他数据结构有这很大的空间优势数据量很大时,布隆过滤器可以表示全集,其他数据结构不能使用同一组散列函数的布隆过滤器可以进行交、并、差运算布隆过滤器缺陷。原创 2025-05-22 10:11:02 · 1362 阅读 · 29 评论 -
【C++】哈希的概念与实现
哈希冲突,哈希函数,哈希表,哈希桶原创 2025-05-19 12:47:19 · 1118 阅读 · 33 评论 -
双向链表及链表总结
与单链表区别在于,双向体现在多了一个prev指向上一个节点的指针,循环体现在尾节点的next指针指向哨兵位头节点,哨兵位头节点的prev指针指向尾节点。原创 2025-01-23 18:19:23 · 1546 阅读 · 6 评论 -
数据结构初阶——顺序表
首先记得包含头文件。首先断言传进来的指针是否为空,通过箭头操作符访问结构体s(初始化在主函数中,后续部分可查看)中的指针a,使用动态内存函数malloc开辟空间,size代表整个空间大小创作不易,希望我的理解能对大家有所帮助,若有什么问题欢迎指正。原创 2025-01-09 12:11:06 · 1027 阅读 · 4 评论 -
数据结构初阶——复杂度
该函数会先调用n-1,n-1会调用n-2、n-3,优先n-2,所以调用的优先顺序是n、n-1、n-2、n-3等,再每一次返回的过程完成时再调用同时调用优先级低的一方,因为二者在同一函数内,所以使用内存空间相同。定义:算法的复杂度是一个函数(指数学中),定量描述了算法的运行时间,但是每个算法在不同配置的机器上运行时间又有所差异,所以把。通过malloc函数动态开辟了一块大小与输入n大小成正比的内存空间,即为n的线性函数,所以n就是临时占用存储空间的量度。这里表示O(N^2),可以看出N代表的是代入函数后。原创 2025-01-07 14:42:51 · 571 阅读 · 8 评论 -
常见排序算法
稳定性定义:相等元素的相对顺序在输出中保持不变。简单选择排序(直接):在类似前三个元素是221的情况下不稳定。希尔排序:相同的数据可能会被分到不同的组预排序,不稳定。堆排序:在类似建大堆实现升序排序时,通过删除末尾元素和向下调整法保持堆序不稳定快速排序:在划分出的不同子区间内有和头尾部相同的数据时不稳定。原创 2025-02-28 09:34:28 · 1609 阅读 · 22 评论 -
数据结构初阶——单链表
返回值是一个结构体类型指针。通过malloc动态开辟一个内存为SLTNode结构体大小的空间,该结构体指针newnode指向这块空间。然后判断malloc是否成功,返回值不为空就将其中存放数据位置赋值为目标值,再将存放指针位置置空,方便后续链接。原创 2025-01-14 17:43:42 · 1266 阅读 · 6 评论 -
经典链表OJ(接口型)
通过以上例题发现除环形链表外的大部分题目,其实都在换种方式用头插、尾插等方式解决问题,一般少用具体查找和删除(涉及改变前一个和后一个节点的指向,需要分类讨论稍复杂),要熟悉哨兵位头节点以及各种置空条件的判断,而且这些题目都是单向的,要对单链表增删查改的掌握程度有一定要求。原创 2025-01-19 19:43:46 · 1367 阅读 · 4 评论 -
树的概念及结构
的判断。原创 2025-02-15 09:31:00 · 539 阅读 · 3 评论 -
栈和队列OJ
思路:用两个栈来实现,一个栈专门用来入数据,另一个专门出数据。和用队列实现栈的区别在于将一个栈中数据倒入另一个栈中时,由于栈的特点是后进先出,实现队列先进先出的功能时数据顺序已发生变化,所以出数据后不需要再将数据倒回,入数据时先入到另一个栈中,等该栈出数据完后再倒进来。先进性空队列的假设,再用一个条件判断语句来修正错误,利用while循环将不为空队列中的元素压入到空队列中,压入后再删除非空队列中该元素,循环成立条件为队列中元素个数大于1,最后创建一个变量来保存栈顶元素并返回。先判断队列是否已满。原创 2025-02-13 21:28:53 · 1015 阅读 · 3 评论 -
链式二叉树
BTNode;创建结构体类型的左右指针来链接,data来存储数据。原创 2025-02-24 09:59:58 · 1235 阅读 · 11 评论 -
堆的实现和堆排序
升序 建大堆:根节点是数组中最大值,将其与最后一个叶结点交换位置,删除堆中最后一个结点(原根结点),再对剩余元素向下调整重构最大堆,此时根结点变成第二大值,通过不断将堆顶元素移到数组末尾,可以逐步让数组变成升序。思路:用数据中前k个元素来建堆,剩余的N-K个元素依次与堆顶元素比较,不满足则替换堆顶元素,比较完后堆中剩余的K个元素就是所求的前K个最小或最大的元素。2.交换堆顶元素和最后一个元素,即数组第一个和最后一个,size–减少堆的大小,相当于删除了堆的最后一个元素(原堆顶元素)原创 2025-02-19 11:36:26 · 1237 阅读 · 10 评论 -
栈和队列的实现
/用于存储栈数据的指针成员int top;//栈顶//容量}ST;定义支持动态增长的栈}QNode;定义了一个QueueNode的结构体,用于表示队列中的节点//对常用的多个数据进行封装,便于传参和修改int size;}Queue;定义了一个名为Queue的结构体,表示整个队列数据封装中设置tail指针为了方便找尾,size为了方便确认元素个数两者关系:Queue结构体通过head和tail指针来管理一系列QueueNode结构体组成的链式队列。原创 2025-01-29 10:59:13 · 676 阅读 · 1 评论