![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 83
数据结构笔记
pzn)
梦想年薪百万
本人学习复习笔记,如果对您有用,万分荣幸
展开
-
数据结构--栈与队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。把队尾前面全部数据给到另一个队列,就能取到队尾相当于栈顶的数据。入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。:栈的删除操作叫做出栈。栈的实现一般可以使用。原创 2024-06-27 00:47:49 · 499 阅读 · 29 评论 -
链表经典面试题--链表修至圆满
追上了 错过了---->进行新得一轮追击,距离变成C-1(假设C是环得长度)两种情况:1.C-1是偶数 2.C-1是奇数。由此,N是1奇数时,C也是奇数;N是偶数是,C也是偶数。结论:如果同时存在N是奇数且C是偶数,那么就永远追不上。假设slow进环时,fast跟slow距离时N,假设slow进环时,fast跟slow距离时N,N是奇数第一轮追不上,C-1是偶数第二轮就追上了。2.N是奇数,第一轮追击会错过,距离变成C-1。所以,N是奇数且C是偶数不能同时存在,原创 2024-06-20 00:50:50 · 769 阅读 · 38 评论 -
经典链表算法题
那么将数列从头至尾、0~numsSize(让存在的数字能出现第二遍)取异或,最后的结果一定是缺失的数。首先我们得清楚异或(^)的原理:相同为0,相异为1,并且0^任何数都等它本身,即(假设ab不相等)a ^ a = 0,a ^ b = b ^ a,0 ^ a = a。2.找交点:让长的链表先走两链表的差距距离,再同时走,第一相等的就是交点。后两指针同时走, 快指针走完,此时慢指针位置就是倒数第k个节点。1.先判断是否相交:判断尾指针是否一致(需要使用地址判断)快指针先走k步,快指针和慢指针距离相差k。原创 2024-06-16 00:36:50 · 465 阅读 · 12 评论 -
时间/空间复杂度(C语言)
但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。,它定量描述了该算法的运行时间。一 个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。3. 实例3递归调用了N次,开辟了N个栈帧,每个栈帧使用了常数个空间。使用大O的渐进表示法以后,Func1的时间复杂度为:O(N^2)的空间,因为这个也没太大意义,所以空间复杂度算的是变量的个数。1. 实例1使用了常数个额外空间,所以空间复杂度为 O(1)2. 实例2动态开辟了N个空间,空间复杂度为 O(N)原创 2024-06-13 22:52:29 · 931 阅读 · 35 评论 -
数据结构--双向链表
2. 带头双向循环链表:结构最复杂,⼀般⽤在单独存储数据。实际中使⽤的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使⽤代码实现以后会发现结构会带来很多优势,实现反⽽简单了。实际中更多是作为其他数据结构的⼦结构,如哈希桶、图的邻接表等等。前面的单链表应该叫不带头单向不循环链表,前面的单链表章节提到的头节点只是为了方便理解,并不是真正的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这⾥“放哨的”List.c//实现双向链表的方法。原创 2024-06-05 22:01:50 · 700 阅读 · 55 评论 -
数据结构--链表
想象⼀下这样的场景,假设每节⻋厢的⻋⻔都是锁上的状 态,需要不同的钥匙才能解锁,每次只能携带⼀把钥匙的情况下如何从⻋头⾛到⻋尾?链表的结构跟⽕⻋⻋厢相似,淡季时⻋次的⻋厢会相应减少,旺季时⻋次的⻋厢会额外增加⼏节。链表中每个节点都是独⽴申请的(即需要插⼊数据时才去申请⼀块节点的空间),我们需要通过指针变量来保存下⼀个节点位置才能从当前节点找到下⼀个节点。当我们想要从第⼀个节点⾛到最后⼀个节点时,只需要在前⼀个节点拿上下⼀个节点的地址(下⼀个节点的。最简单的做法:每节⻋厢⾥都放⼀把下⼀节⻋厢的钥匙。原创 2024-05-30 00:25:41 · 1438 阅读 · 18 评论 -
顺序表实现通讯录项目
实际上要进行的是顺序表的初始化,顺序表的初始化已经实现好了,所有直接调用顺序表中的SLlnit函数,便可以实现通讯录的初始化,定义ContactInit函数。要删除的数据必须存在,才能执行删除操作,所以在这之前要先实现一个查找函数FindByName。因为要用到SeqList.h中的顺序表,所以要改一下数据类型,改成创建好的通讯录类型。因为要用到顺序表相关的方法,对通讯录的操作实际就是对顺序表进行操作。这里首先接收用户要添加的数据,然后调用顺序表当中的头插或尾插。也是一样,可以直接调用顺序表实现好的方法。原创 2024-05-27 13:53:57 · 618 阅读 · 61 评论 -
数据结构--顺序表
但是在物理结构上并不⼀定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串...存放指定位置,然后把pos之后的数据整体往后移动一位,在pos位置插入所需要的数据即可。因为数组并不是定长的,可根据实际数据大小进行动态申请空间,随着数据的增加,也可进行。顺序表的底层结构是数组,对数组的封装,实现了常⽤的增删改查等接⼝。与插入数据原理一样,只需在所需的位置删除数据即可。在数据的头部插入数据;在数据的尾部插入数据。原创 2024-05-25 16:37:15 · 614 阅读 · 3 评论