
数据结构
文章平均质量分 84
初步学习数据结构
夏微凉.
第十五届蓝桥杯JavaB组国一,阿里云专家博主, 大三在读学生,计算机科学与技术专业,热爱编程和分享知识,欢迎一起交流和学习~
展开
-
位图和布隆过滤器以及海量数据相关面试题
一种支持删除的方法:将布隆过滤器中的每个比特位扩展成一个小的计数器,插入元素时给k个计数器(k个哈希函数计算出的哈希地址)加一,删除元素时,给k个计数器减一,通过多占用几倍存储空间的代价来增加删除操作。求小文件交集:对于编号相同的小文件,将其中一个小文件的整数加载到内存中的哈希集合中,然后遍历另一个小文件的整数,检查是否在哈希集合中,如果存在则为交集元素。4. 解决数据库缓存击穿,黑客攻击服务器时,会构建大量不存在于缓存中的key向服务器发起请求,在数据量足够大的时候,频繁的数据库查询会导致挂机。原创 2025-01-31 09:21:27 · 755 阅读 · 0 评论 -
【数据结构】二叉搜索树的实现
这篇文章主要介绍了二叉搜索树的概念以及各种操作, 如查找, 插入, 删除. 其中删除操作最为复杂, 需要分情况讨论. 最后对二叉搜索树的性能进行简单分析.原创 2024-08-14 07:00:00 · 582 阅读 · 0 评论 -
【数据结构】十大排序算法总结和代码实现(插入, 希尔, 选择, 堆排, 冒泡, 快排, 归并, 计数)
本文主要介绍了十大排序算法总结和代码实现(插入, 希尔, 选择, 堆排, 冒泡, 快排, 归并, 计数)原创 2024-08-12 07:00:00 · 1019 阅读 · 0 评论 -
【数据结构】二叉树链式结构的实现及其常见操作
在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在我们对二叉树结构掌握还不够深入,为了降低学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。这样我们就写出了一个简单的二叉树。原创 2023-08-17 09:03:09 · 1606 阅读 · 120 评论 -
【数据结构】堆的实现,堆排序以及TOP-K问题
向堆中插入一个元素,我们可以将这个元素插入到堆的尾部,因为堆的实际存储结构是一个数组,我们可以将元素放到数组末尾,但如果仅仅是插入到数组末尾的话,会将堆的结构给破环,我们还需要调用一个向上调整的函数,来调整各个节点间的大小关系。弹出元素就是将堆顶的元素给删除,但我们不能直接进行删除,这样会将堆的结构给破坏,正确的方法是先将堆顶的元素和最后的元素进行交换,这样保证的首元素的左子树和右子树依然是堆的形态,然后将size自减,最后调用一个堆的向下调整函数。这里写的是小根堆,大根堆可以在小根堆的基础上稍作修改。原创 2023-08-15 07:45:42 · 2433 阅读 · 181 评论 -
【数据结构】树和二叉树的概念及结构
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。若一个节点含有子节点,则这个节点称为其子节点的父节点;完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。从根开始定义起,根为第1层,根的子节点为第2层,以此类推;也就是说,如果一个二叉树的层数为K,且结点总数是。以某节点为根的子树中任一节点都称为该节点的子孙。一个节点含有的子树的根节点称为该节点的子节点;要注意的是满二叉树是一种特殊的完全二叉树。一个节点含有的子树的个数称为该节点的度;原创 2023-08-13 20:11:46 · 2968 阅读 · 126 评论 -
【数据结构】栈和队列(队列篇)
我们使用的是不带头节点的单向链表来实现队列,而队列要在队尾插入数据,因此每次都要遍历链表找队尾,这样会使得程序的运行效率变低。这里采取了一种解决办法:定义一个指向队尾的指针tail每次插入新的数据就只要将tail中的next指针指向新节点即可,同时插入新的数据后再更新tail的位置。}QNode;这里单独定义了一个结构体来存储头指针head和尾指针tail。}Queue;原创 2023-07-02 23:07:24 · 1000 阅读 · 42 评论 -
【数据结构】栈和队列(栈篇)
下面是定长的静态栈的结构,实际中一般不实用,所以我们主要实现下面的支持动态增长的栈int top;// 栈顶}ST;支持动态增长的栈int top;}ST;这里的top表示栈顶元素的位置,capacity表示栈的容量,a是一个指针,用于接收动态内存开辟数组的地址。原创 2023-06-29 11:12:08 · 1789 阅读 · 85 评论 -
【数据结构】双向链表
和单向链表一样,双向链表每个节点都是由结构体组成的数据类型,但是双向链表结构体中增加了一个指向前一个节点的指针。//方便修改数据类型//指向下一个节点的指针//指向前一个节点的指针//存储的数据}LTNode;我们今天要将的是带哨兵卫头节点的双向循环链表,它的头节点不存储有效数据,头节点中的prev指针指向最后一个节点。原创 2023-06-28 15:05:06 · 11118 阅读 · 67 评论 -
【数据结构OJ题】链表带环问题
将meet的下一个节点设置成newHead,求出head到meet的长度n, newHead到meet的长度m, 再利用快慢指针,使长的链表先走fabs(m-n)次,再同时走,当两个指针想等时,就到达了环的入口。:使用快慢指针,慢指针每次走1步,快指针每次走2步,当快指针走到末尾是,慢指针的位置就是链表中间位置。用一个指针从链表的头节点出发,另一个指针从链表相遇的节点出发,当这两个指针相遇时,说明它们到达了入口。:先遍历一遍链表,计算出链表的长度,然后将长度除二,在遍历半个链表即可。原创 2023-06-27 21:20:35 · 978 阅读 · 34 评论 -
【数据结构OJ题】移除链表元素
此时,我们将prve的next指针指向cur的下一个节点,然后释放cur所指向的内存空间,使得cur指向prve的下一个节点(也就是新的当前节点),继续遍历整个链表。此时,我们修改head指向cur的下一个节点,然后释放cur所指向的内存空间,使得cur指向新的头结点(即head),继续遍历整个链表。如果是,我们就需要将该节点从链表中移除。如果当前节点cur的值不等于val,我们就只需要更新prve和cur的指向,使得它们分别指向当前节点的前一个节点和当前节点的下一个节点,然后继续遍历整个链表。原创 2023-06-27 11:32:30 · 682 阅读 · 45 评论 -
【数据结构】单向链表
哈喽,大家好,今天我们学习的是数据结构里的链表,这里主要讲的是不带哨兵卫头节点的单向链表,下篇将会继续带大家学习双向链表。原创 2023-05-05 13:46:26 · 1313 阅读 · 57 评论 -
【数据结构OJ题】反转链表
上面的方法是针对链表不是空链表而设计的,如果是空链表,程序就会出错,此时可以直接返回一个空指针即可。然后就是一个循环的过程了,每次将。n2为空指针的时候才终止,为空指针的时候,不能让。改变链表中指针的指向。原创 2023-05-03 21:08:28 · 218 阅读 · 22 评论 -
算法OJ题(1)
比较num1[end1]和num2[end2]的大小,将较大值依次移到数组一,从后往前进行。定义两个变量end1,end2 ,分别指向两个数组的最后一个元素。使用双指针算法可以使时间复杂度达到O(1).原创 2023-04-29 21:09:35 · 277 阅读 · 18 评论 -
【数据结构】动态顺序表
用一个结构体构造顺序表:这里用SLDataType来替换int,可以方便我们修改顺序表的数据类型同时用SL来替换,方便写代码(在后面的函数中可以直接用SL来代替int size;//表示数组存了多少个数据//数组实际能存数据的空间容量是多大}SL;原创 2023-03-17 22:35:16 · 1319 阅读 · 14 评论 -
【数据结构】时间复杂度和空间复杂度的计算
时间复杂度主要衡量-个算法的运行快慢,而空间复杂度主要衡量一个算法运行所需要的额外空间。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。原创 2023-03-11 19:28:32 · 578 阅读 · 8 评论