数据结构
文章平均质量分 93
诡异森林。
学,学不完的。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构--排序(2)
对于end1越界和begin2越界,两种都不需要进行排序,且end1越界被包含在begin2越界,所以直接判断begin2越界break;思想:通过对数组元素的大小,将它们记录在对应的另一组数组中,将它们从小到大有序的统计在另一个数组中;接着将它们相邻两个分为一组,进行排序,排序之后组合成一组,一直往复,最终将它们合起来,完成排序。对于分段所处下标,end1,begin2,end2均有可能会超过n,所以需要进行判断;如相对集中的整数数组,像0,99999这样的话就开辟数组有点大,浪费空间;原创 2023-10-06 11:18:02 · 485 阅读 · 32 评论 -
数据结构--快速排序
在内层循环中,我们是先走的是右指针,再走左指针;这样就。原创 2023-09-26 23:55:18 · 1070 阅读 · 36 评论 -
数据结构--排序(1)
这里不要看着有很多层循环进行嵌套,实际上它的算法效率是远远高于直接插入排序的,以gap一直取二等份为例,1000个数据也就取10次gap,100万数据也就取20次gap,10亿才取24次gap,所以外层的循环实际次数是不大的,相对如此大的数据几乎可以忽略不计;,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;内循环就是将新插入的数找到合适位置,让出空间,让新的数插入;原创 2023-09-22 21:44:44 · 701 阅读 · 8 评论 -
数据结构--二叉树(2)
上面讲这是一种递归遍历,那么我们就需要根据递归的方式来进行访问遍历。原创 2023-09-19 11:47:20 · 548 阅读 · 7 评论 -
数据结构--二叉树-堆(1)
树是一种常见的非线性的数据结构,,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点孩子节点或子节点:原创 2023-09-11 22:23:10 · 1377 阅读 · 32 评论 -
数据结构--栈和队列
这样子就能完成我们循环的目的。原创 2023-08-09 16:42:40 · 903 阅读 · 3 评论 -
数据结构--单链表OJ题
上文回顾---单链表这章将来做一些链表的相关题目。目录1.移除链表元素2.反转链表3.链表的中间结点4.链表中的倒数第k个结点5.合并两个有序链表6.链表分割7.链表的回文结构8.相交链表9.环形链表编辑 10.环形链表II编辑 编辑 答案:2.反转链表 答案: 答案: 答案: 答案: 答案: 答案: 答案:9.环形链表 答案: 10.环形链表II 答案:原创 2023-08-03 17:18:40 · 825 阅读 · 20 评论 -
数据结构--单链表
上一章,我们讲了,我们会发现有以下问题:1.当我们要头部或者插入或删除时,都需要进行位置挪动,腾出某一个位置,时间复杂度为0(N);2.增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3.增容会有一定的浪费空间;例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间。下面我们来看看单链表这种线性结构;原创 2023-08-02 16:19:22 · 723 阅读 · 12 评论 -
数据结构--动态顺序表
顺序表和数组在某种程度上可以说是相似的,因为顺序表的基本实现就是数组。顺序表是对数组的一种封装,它在数组的基础上提供了更加灵活的内存管理方式,使得插入、删除等操作更加高效。在这里,由于还有头插和位置插入,所以就写一个函数来进行增加容量;对数组先开辟4个空间,然后判断是否开辟成功,成功就对size和容量进行初始化赋值;每个节点包含元素和指向下一个节点的指针,所以链表的内存分布可以是离散的。查找对应的元素,如果有多个元素一样,返回的是最左边的元素;,并且插入和删除元素时需要移动其他元素,效率较低。原创 2023-08-01 16:13:23 · 761 阅读 · 12 评论 -
数据结构--算法的时间复杂度和空间复杂度
一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。我们以最坏的情况去看,每循环一次这个数组的长度就会减半,假设以N表示数组的长度,我们要在数组中寻找一个数,那么假设寻找了x次,那么通过计算2^x=N;在实际计算时间复杂度中,我们其实不一定要精准的计算出执行的次数,只需要大概的执行次数,那么这里我们使用大O的渐进表示法。那么外循环执行N次,总共就执行N^2次;原创 2023-07-29 00:05:26 · 1032 阅读 · 5 评论
分享