数据结构
DaisyyViolet
这个作者很懒,什么都没留下…
展开
-
基础算法---归并排序
归并:合二为一 双指针 比较两个有序数组写入新创建的数组 (稳定的)确定分界点:mid:(l+r)/2。时间复杂度:O(n)原创 2023-06-13 21:58:54 · 35 阅读 · 0 评论 -
快速排序---分治
首先通过快速选择分为左右两边,然后如果k<=left的个数,则只需要递归左边 如果k>左边的个数,则只需要递归右边。确定分界点 在一个区间[l,r]中 挑选l 或者 r 或者 (l+r)/2 或者随机 为x。时间复杂度(平均复杂度):nlogn (n分成每份占1,需要logn,一共n层)调整区间 <=x 和 >=x。时间复杂度:O(n)原创 2023-06-13 21:58:45 · 27 阅读 · 0 评论 -
堆以及堆排序
结构:完全二叉树(除最后一层节点,上面是满的,最后一层节点从左到右分布)直接从 n/2 down() 到 n (n/2开始就是不看最后一排)如何手写一个堆 堆用于维护数组集合。建立堆(时间复杂度为O(n))时间复杂度O(logn)时间复杂度O(logn)原创 2023-06-13 21:54:07 · 28 阅读 · 0 评论 -
搜索与图论
深度优先搜索,从初始节点出发,按预定的顺序扩展到下一个节点,然后从下一节点出发继续扩展新的节点,不断递归执行这个过程,直到某个节点不能再扩展下一个节点为止。心得体会:图的应用非常多,只要熟悉了计算思路,就可以搞清楚怎么实现这个功能,但是就是写不出来,说明其实最考验的,还是编程能力,因此还是要多敲代码。2.接下来n次迭代(循环) (s:当前已确定的最短距离的点,最开始是原点)入度为0的点:没有任何一条边指向它—>排在当前最前面的位置。没有有向图无向图的区别,无向图是一种特殊的有向图。是该图的一个拓扑序列。原创 2023-06-12 16:59:18 · 23 阅读 · 0 评论 -
6.2Huffman
哈夫曼树不存在度为1的节点若给定n个数要求构造哈夫曼树,则构建出来的哈夫曼树的节点总数为2n-1,度为0的叶子节点个数一定比度为2的节点个数多1构建哈夫曼树就是反复选择两个最小的元素进行合并,直到只剩下一个元素为止。原创 2023-05-15 22:28:23 · 35 阅读 · 1 评论 -
3.6链队列
的线性数据结构,且这个数据结构只允许在一端进行插入,另一端进行删除,禁止直接访问除这两端以外的一切数据,链队列是在链表的基础上实现的队列结构,链队列的头部删除和尾部插入的时间复杂度均为O(1),而如果只是一个单链表,尾部删除的时间复杂度为O(n),这也是队列的一个优点。因为队列是先进先出的,所以首先通过front节点找到第一个存放有效数据的节点,用tempNodePtr存放起来,便于后续说明和释放(free),再将front指针指向第二个存放有效数据的节点,最后释放tempNodePtr。原创 2023-04-24 20:13:00 · 31 阅读 · 0 评论 -
3.2栈的应用-括号匹配
分析:首先采用bool函数,只返回true或者false,然后关键是使用switch判断语句求"()“”[]“”{}“是否匹配。将这些括号按顺序入栈,如果遇到”)“”]“”}"判断之前的一个是否为与之匹配的括号,如果不是则直接返回false,跳出switch语句,后面的都不需要再查看了,但如果正确则一直执行,直到代码结束,则完全匹配,返回true。栈可以直接添加元素,不用从头遍历,添加速度快,且由于栈只允许栈顶进出元素,栈的顺序存储结构很方便,但需要先确定数组存储空间的大小。原创 2023-04-24 14:01:15 · 53 阅读 · 0 评论 -
3.5汉诺塔问题
【代码】3.5汉诺塔问题。原创 2023-04-22 19:37:54 · 51 阅读 · 0 评论 -
线性表小结
线性表是指n个具有相同特性的数据元素的有限序列线性表中数据元素之间关系是一对一的,除了第一个和最后一个数据元素之外,其他元素首尾相连(但是这句话只适用于大部分线性表,如循环链表不符合)原创 2023-04-19 10:58:31 · 27 阅读 · 0 评论 -
2.4多项式的加法
首先给两个链表添加元素,然后两个链表的exponent值对比,通过比较大小排列,将相同的值的coefficient值相加,还有就是这个代码的指数固定的是升序排列的,在coefficient值相加时,如果为0,p直接指向p->next,如果不为0,将p给r,p再执行下一个,一直循环,直到其中一个为空,再将不为空的连接在最后。原创 2023-04-10 21:02:26 · 34 阅读 · 0 评论 -
2.3静态链表
它首先需要由数据域和游标构成的节点,然后再创建一个数组用于存储“1”和“0”,表示该处的数据是否被使用。nodes[0]相当于头节点,因此在insertElement创建新节点(添加新元素)的时候从nodes[1]开始,在一共5个空间里面,最后输出为"Hell",没有"o"。在抄写闵帆老师的代码时,也要思考代码运行的过程,自己再去敲一遍,才知道自己有没有掌握。自己敲代码过后才发现原来并没有掌握这个知识,一定要自己去敲,才会发现自己隐藏的问题,还有很多不足,多多改进。以上是闵帆老师的代码以及运行结果。原创 2023-04-07 15:44:24 · 53 阅读 · 1 评论 -
2.2单链表
由于顺序表的插入删除操作需要移动大量的元素,影响了效率,因此引入了线性表的链式储存–单链表。它不要求逻辑上相邻的两个元素在物理位置上也相邻,因此不需要连续的存储空间。单链表在运行过程中,遍历是十分重要的。它每一次对元素的删除插入,都需要从头节点开始依次往后推,直到找到目标位置。通过了解地址的分配的具体情况,更利于了解操作系统的机制,让自己对数据结构的认识也更加深入,有利于后期学习。单链表的掌握非常必要,要通过画图来辅助理解,才能更好的深入的了解链表。通过图像理清自己的思路,以免犯错。原创 2023-03-29 13:47:00 · 57 阅读 · 0 评论 -
2.1顺序表
写代码时,要做到书写规范,有意识的增加备注,让自己的代码更加易于理解。也便于自己日后复习查看,代码有一定的格式,在什么位置敲空格都有讲究。写代码时,先列出总纲,再在每一个函数里面添加内容优化,能让自己的思路清晰明了。原创 2023-03-29 13:24:59 · 48 阅读 · 0 评论 -
数据结构绪论
数据内容之间都存在着某种联系,要掌握学会如何处理数据,是数据结构的主要研究问题。原创 2023-03-22 10:54:35 · 254 阅读 · 1 评论