数据结构每日一题
文章平均质量分 92
积薪高于山,焉用先后别
DAY Ⅰ
积薪高于山,焉用先后别
展开
-
【数据结构每日一题】队列——用栈实现队列
由于队列是先进先出的,而栈先进后出,所以需要定义两个栈来实现先进先出:先进。相当于先将输入的内容放入输出缓存区,这时候清空了输入条,则又可以继续输入了。🎇这是一道栈和链表的综合练习题,不是很难,但有利于知识点的回顾~由于从栈中取出元素是逆序的,所以必须先将。来模拟一个队列,当需要入队时,用。则出队失败,并且这也意味着此时。本节为栈和队列的综合练习题。来存放已入队的元素,则压入。由于为顺序栈,初始化即让。中的所有元素依次出栈并压入。中进行出栈操作,而对出队栈。不为栈满状态,则直接将。中所有元素出栈并压入栈。原创 2023-06-04 09:00:00 · 1132 阅读 · 0 评论 -
【数据结构每日一题】栈——中心对称链
使用栈来判断链表中的数据元素是否中心对称,首先,让单链表的前半段元素放入栈中,在处理链表的后半段元素时,每访问链表的一个元素,就让栈弹出栈顶元素与之进行比较,若相等,则继续判断后续元素,直到链表后半段的元素全部比较完成,此时,若栈为空,则为中心对称链;要判断一个带头结点的单链表是否中心对称,即链表的前半部分和后半部分互为逆序关系,因此,由栈的先进后出特性可以实现逆序。🎇这是一道栈和链表的综合练习题,不是很难,但有利于知识点的回顾~指向的是栈顶元素,而当。结束时,如果链表长度。,如果此时栈为空且指针。原创 2023-06-01 09:00:00 · 696 阅读 · 0 评论 -
【数据结构每日一题】链表——单链表重排
p作为中间结点的指针,若要链表逆序,则最后p的next指针一定是要指向链表的尾结点的,所以,我们每扫到一个后段结点,都把他当作尾结点来看,则 q的next指针要指向上一轮 p的next指向的结点,这样就完成了箭头反向(因为上一轮p的next指向前一个结点),再让 p的next指向当前结点 q,即连接了表尾,实现了。由于中间结点(两个或一个)在重排后一定是不动的,所以中间结点或中间结点的 next在重排后会变为尾结点,因此必须使其指向 NULL,相当于特判,否则最后打印单链表时会进入死循环。原创 2023-05-31 09:00:00 · 794 阅读 · 2 评论 -
【数据结构每日一题】链表——存储优化
删除结点时,p暂时是不移动的,只是将p->next指向再下一个结点,因为再下一个结点值仍可能是已经标记过的,如果直接移动p,将无法访问到该结点的值(因为访问的是p->next)作用是将某一块内存中的内容全部设置为指定的值,这个函数通常为新申请的内存做初始化工作,是对较大的结构体或数组进行清零操作的一种最快方法。②不断移动新指针q,并检查下一个结点值是否被标记:若被标记过,则标记该值,并继续移动q;由于c++中不允许使用变量作为数组的长度定义数组,必须为常量值,所以我们采取动态分配的方法。原创 2023-05-15 12:45:14 · 97 阅读 · 0 评论 -
【数据结构每日一题】链表——共享后缀
在我们已知了公共后缀链之后,要得到公共后缀的首位置,由于是后缀相同,于是我们。对于两个单独存在的链表,我们如何将他们的公共后缀存储在同一片内存空间呢?要让尾结点对齐,我们需要先传入指向两个链表的头结点的指针。,在函数内部使用时,则需要对二级指针进行解引用,才为指针。后,我们不断移动两个指针,直到相等,若最后。首先,我们仍需要先将两个链表对齐;时,即为公共后缀的起始地址,返回。由于要对指针本身进行修改,我们则。将两个链表以表尾对齐,使指针。,当指针指向的下一个结点。原创 2023-05-12 09:00:00 · 425 阅读 · 0 评论 -
【数据结构每日一题】链表——查找元素
由第一种方法可知,我们牺牲了空间换来了时间,那么,有没有办法,可以在单链表内部进行操作,从而一次遍历就可以得到倒数第。题中只给了头指针,我们并不知道链表的长度,所以,必须要进行一次完整的遍历,所以,关键在于如何尽可能高效地得到倒数第。,说明p走了count步时,已经超过了链表的长度,则已经说明k大于链表的长度了,因此,这时k不合法。这是因为,我们通过这样就可以不用单独判断k是否超过链表的长度了,因为,若结束时,,初始时,将两个指针都指向单链表的第一个结点,,同样地,在遍历的过程中,记录长度。原创 2023-05-10 13:27:23 · 543 阅读 · 0 评论 -
【数据结构每日一题】线性表——三元组的最短距离
因为我们固定了最小元素,只需要找到最大的元素,即可确定它的距离,那么,我们尽可能从另外两个集合中抽取尽可能小的两个元素(但要大于所固定的最小元素),这样就使得最大的元素最小,也就得到了最短距离。我们每一次都找到三个集合中,找到没有被处理过的最小元素,和其他两个集合中比它大的最小元素,得到该最小元素对应的最短距离后,令它所在的数组下标后移一位,继续重复操作,直到存在有数组访问溢出或。🔆因此,由D的表达式可知,距离仅取决于最大和最小值,所以问题可以简化为固定c,找到一个a,使。,令初始指针指向数组的首位置。原创 2023-05-05 11:29:44 · 783 阅读 · 4 评论 -
【数据结构每日一题】线性表——未出现的最小正整数
这就是为什么要构造辅助数组的原因,我们换一种思路,把一一检查数组中是否存在该正整数换成遍历数组,每遇到一个正整数就将它放入辅助数组对应的空中,最后遍历辅助数组,最先遇到的空即为最小正整数。memset的作用就是将某一块内存中的内容全部设置为指定的值,用来初始化新申请的内存,返回对象是一个指向存储区s的指针,从地址s开始,字节长度为n的内存全部赋值为ch。对于小于等于0的数可以直接排除,对于大于0的数,我们一一检查从1开始的正整数,判断是否在数组中出现。的所有数,这时候遍历辅助数组时,发现。原创 2023-04-28 10:15:12 · 397 阅读 · 0 评论 -
【数据结构每日一题】线性表——数组的主元素
因此,若前n-1个元素作用之后抵消为0,此时,最后一个元素次数一定为1>0,所以,该条件不能限制该情况的发生,还需要进行二次判断。算法的策略是:从前往后扫描数组,标记出一个可能成为主元素的元素num,然后二次扫描计数,判断它是否"真的"为主元素。对于这个辅助数组,循环遍历已知数组,每当出现一个数,就将它作为辅助数组的下标,让辅助数组该位置上的数字。但是,我们可以看到,这种方法虽然简单高效,但最大的缺点是要另外开辟一片连续的内存空间,用于求解数组中的最大最小元素,但其得到的是最大(最小)元素的地址,所以,原创 2023-05-04 17:56:50 · 572 阅读 · 1 评论 -
【数据结构每日一题】线性表——合并数组的中位数
如果为偶数,则去掉中间点,否则,将会陷入死循环。,则说明排序后a[i]在当前b[j]之前,a需要更大的数才能与b匹配,则a向后移动一个元素,继续比较当前b[j]所以,对于长度为4的两个数组,无论如何,双指针总共移动三次后,都会指向中间两个数。,则a[i]排在b[j]之后,此时将b向后移动一个元素,再与当前a[i]比较。最后,将指针i,j指向的数a[i],b[j]进行比较,较小者为answer。用两个指针i,j分别指向两个升序数组的a[0],b[0]但是,我们易分析知,当a,b数组长度为n时,我们需要循环。原创 2023-04-26 13:09:49 · 211 阅读 · 0 评论 -
【数据结构每日一题】线性表——数组逆置
cin>>x不断向数组内填入元素,而当最后一次输入为’\n’时,用cin.get()将其吞掉,并结束输入。对于给定的矩阵R,我们希望它从from开始,到 to的位置之间的元素进行转置(也就是首尾一次交换),将前p个数先存入辅助数组中,移动剩余n-p个数至原数组前, 最后将这p个数放入。将数组分块为a,b,要从ab->ba状态,我们可以联想到想到矩阵的逆。,我们得到了两个部分交换后的数组,对当前数组我们再整体取一次逆,——因为为数组内部自身进行交换操作,没有额外开辟空间。——因为要额外开辟长度为p的数组。原创 2023-05-03 10:18:29 · 276 阅读 · 1 评论 -
【数据结构每日一题】绪论——时间复杂度
🎇 这里要注意的是问题规模为n,所以时间复杂度也是关于n的表达式,我们在得到关于k的递推式之后,必须要将k代换回来才能得到最终结果。🎇总结了一下时间复杂度中的典型问题,需要多加练习才能孰能生巧噢~也就是循环语句每执行一次(t+1),变量i就会加一。也就是循环语句每执行一次(t+1),变量x就会加一。当i=3时,sum=0+1+2+3;当i=2时,sum=0+1+2;当i=1时,sum=0+1;以此类推,于是我们不难得到。递归结束的条件为问题规模由。本节为求解时间复杂度专题。如有错误,欢迎指正~!原创 2023-04-22 09:53:27 · 182 阅读 · 0 评论 -
【数据结构每日一题】线性表——数组合并中的时间复杂度
可以很容易得到每次比较必定会归并一个元素,若其中一个有序表的最大元素都小于另一个有序表的最小值,那么只需要比较n次,另一个表直接放入即可,同理最多比较2n-1次。n链表中5从[3,6]比较了3次,8从[6,9]比较了3次,10从[9,11]比较了2次,13最后和11比较了1次,一共是3+3+2+1=9次。很显然,只要把链表n的三个元素分别去跟链表m的第一个元素即4去比较,比较完后再把m链表插在后面,比较的次数就是n的的长度。a. 1和2比较,1小,n的指针后移指向n[1](那下一个和它比较大小),k=1。原创 2023-04-25 14:26:48 · 367 阅读 · 1 评论