数据结构
文章平均质量分 52
qrchunx
这个作者很懒,什么都没留下…
展开
-
数据结构7.2:Prim算法与Dijkstra 算法
两者的不同在于Prim算法在每次选择边和顶点时只考虑该点和不在树中的点之间的边,而Dijkstra算法每次选择的顶点都是距离起点最近的一个点,并更新该点到其邻接顶点的距离。Prim算法的基本思路是从一个顶点出发,每次选取一条权重最小的边连接该点和不在树中的点,直到所有的顶点都在树中。- 对于V中的每个点,计算其到起点的最短距离并记录下来,如果存在一条更短的路径,就更新该点的最短距离,直到所有的点都被访问。- 在V集合中选择一条到U集合距离最短的边,将其加入到U集合中,并将该边记录为最小生成树上的一条边。原创 2023-06-13 00:07:06 · 164 阅读 · 0 评论 -
数据结构7.1:图的创建和遍历
如果邻居节点连接到了当前节点(即paraGraphPtr->connections[tempNode][j]为真),则将其标记为已访问并入队,同时输出该节点。接下来,遍历所有未访问的邻居节点,如果邻居节点连接到了当前节点(即paraGraphPtr->connections[paraNode][i]为真),则对邻居节点执行深度优先遍历。图分为无向无权图,无向有权图,有向无权图,有向有权图,这里给出无向无权图的代码,其他 的图的创建方式与此类似,只需改动weight和新建节点的个数即可。原创 2023-06-12 22:13:40 · 216 阅读 · 0 评论 -
数据结构6.2:哈夫曼树
由于能力有限,这里给出缩水版本的哈夫曼树,通过给出的权值列表来生成哈夫曼树,并以前序遍历输出。1.从结点列表中选出第一小和第二小的节点,并组成一棵树,父亲结点的权值=两结点权值之和。2.将生成的新树再次放入结点列表中,重复第一步,直到列表中只剩下一个结点。输入的权值列表为{ 5,1,3,6,11,2,4 }原创 2023-06-12 21:21:10 · 191 阅读 · 0 评论 -
数据结构6.1:二叉树的创建和遍历
先上代码,后说废话1.我们在使用bool函数时要记得引头文件,否则会报错。2.在这个结构体中BTNode已经包含关键字struct了,所以在后续申请空间时,直接用sizeof(BTNode)即可。原创 2023-06-12 18:02:08 · 155 阅读 · 0 评论 -
数据结构3.2:链队列
然而,遍历链表可能需要O(n)的时间复杂度,因为链表的长度可能随着元素的增加而增加。出队操作(dequeue)时,从链队列的开头移除并返回一个元素,并更新队头指针。总之,链队列具有较低的时间复杂度(插入和删除为O(1)),但空间复杂度较高(为O(n))。2. 链队列包含两个指针:队头指针(front)指向链队列的第一个元素,而队尾指针(rear)指向链队列的最后一个元素的下一个节点。5. 链队列的空间复杂度为O(n),其中n为链表中元素的数量。因为链队列需要额外的空间来存储两个指针以及可能存在的头节点。原创 2023-04-24 23:42:59 · 109 阅读 · 0 评论 -
数据结构3.1:栈的应用--括号匹配
我们本该在最后判断栈里的元素是否为‘#’,若是,则说明栈内的左括号全部出栈即括号是匹配的,若不是‘#’,则说明括号不是匹配的,应该返回false,而老师判断语句写的是如果tmepPopedChar不等于‘#’时返回true,这就犯了严重的错误,但是为什么老师的代码测试看起来没什么问题呢,因为代码测试中没有考虑到左括号多出来的情况。这居然是对的,因为老师在后面多写了一句return true,无论 if判断结果如何都会是返回true,所以正确的代码应该是这样的。我在老师的测试函数中多加了一句。原创 2023-04-24 14:26:30 · 199 阅读 · 0 评论 -
数据结构2.6:汉诺塔问题
先上代码,后说废话。原创 2023-04-20 00:25:25 · 264 阅读 · 0 评论 -
数据结构2.5:线性表总结
a) 插入:在指定位置插入一个元素(单向链表需要修改前驱节点的指针,双向链表需要修改前驱节点和后继节点的指针)其中,n(≥0)称为线性表的长度,当n=0时,称为空表。缺点:插入、删除元素时需要移动大量元素,如果元素个数超过数组容量,需要重新分配空间。优点:插入、删除元素时只需要修改相邻节点的指针,不需要移动大量元素。2、链表:将线性表中的元素存储在任意的存储单元中,通过指针进行连接。1、顺序表:用一段连续的存储单元依次存储线性表中的元素。c) 查找:查找指定位置的元素。c) 查找:查找指定位置的元素。原创 2023-04-19 22:19:41 · 125 阅读 · 0 评论 -
数据结构2.4:多项式加法
设两个待相加的多项式的链表的头指针分别为head1(第一个多项式)和head2(第二个多项式),两者的和保存到链表head1中。而q指向的结点小时,需要将q结点插入到p前,然后q再重新指回到第二个多项式中的下一结点,继续进行处理。若p不为空,第一个多项式中的剩余项已经在链表中,不作处理,如果q不为空,说明此时第二个多项式中剩余的节点的指数都大于p中的指数,所以只需要将q链接到相加后的第一个多项式末尾。(1)若两个多项式中当前结点的指数值相同,则它们的系数相加,结果保存到p结点,并将q结点删除。原创 2023-04-11 00:26:35 · 68 阅读 · 0 评论 -
数据结构2.3:静态链表
运行结果是这样的,Hello完整打印出来了,嘿,那不是比老师那写得还要稍微好一些,后面我才意识到这是测试空间满了的情况。首先我觉得这里指针的使用非常巧妙,一个是*NodePtr,一个是struct StaticLinkedList里面的int*,这就能让我们以数组的形式来表达NodePtr和used,起初我想了很久为什么要用int*,直到后面使用起来才知道这个指针的妙处。开头给的difine的size为什么那么小我也很是费解,我还自作聪明的给他改大了一些。原创 2023-04-08 21:22:05 · 68 阅读 · 1 评论 -
数据结构2.2:单链表
被自己蠢到了,free对象写错找bug找了一个多小时,原代码没删提醒自己是个笨蛋,今天没时间写博客了,有空马上补。原创 2023-03-30 03:00:54 · 103 阅读 · 1 评论 -
数据结构 2.1:顺序表
在这过程中我也发现了一些问题,比如我们规定的LIST_MAX_LENGTH=10,而在函数SequentialListInit (int paraData[ ] , paraLength) 中,我们并未对paraData[ ]的长度paraLength有限制,可能有数组越界的风险;自己敲过一遍后,更加认识到了代码规范性的重要性,要养成写注释的好习惯,变量命名要规范,不然写着写着就忘记自己用的是缩写还是全称,是大写还是小写了,往往会浪费很多的时间,所以要有自己个人写代码的风格。原创 2023-03-27 12:25:06 · 98 阅读 · 1 评论 -
第一堂数据结构与算法课的收获
进入到大一下,课程的量与难度都有了明显的提升,当我还被大物和高数折磨得死去活来的时候,又一门课——《数据结构与算法》又开课了,开始其实我内心是有点抗拒的,不过这种想法很快就被打消了,老师幽默的上课风格,别具一格的上课方式等都让我感到耳目一新,激起了我的兴趣。让同学起来读课本并且让他找出自己觉得很难理解的部分,这好像很奇怪,因为这其中夹杂着很多专业的术语,或者有些话看起来又很正常,似乎找不出什么问题,但老师坚持要我们找出问题,我想这也是我们需要慢慢学习的一种心态,或者说是较真的学习态度。原创 2023-03-22 23:11:58 · 59 阅读 · 0 评论