- 博客(21)
- 收藏
- 关注
原创 【数据结构】树形结构--堆
堆是一棵顺序存储的完全二叉树。上篇文章我们提到了二叉树的存储分为顺序存储和链式存储(不清楚的可以先去看看这篇文章:【数据结构】树形结构–二叉树一般普通的二叉树不建议使用顺序存储,因为开辟数组所需要的空间是按照完全二叉树来开辟的,若是存储一棵歪歪扭扭的二叉树或者一棵斜树,则会造成较多的空间浪费,而完全二叉树就适合使用数组存储。如图所示:所以,如果我们要用顺序存储,我们就偏向于要用完全二叉树。而堆,就是完全二叉树的一种。并且在实际中,我们也会把堆用顺序结构的数组来去存储。
2025-06-16 15:54:14
634
原创 【数据结构】树形结构--二叉树(二)
因此可以借助队列层序遍历二叉树,循环将二叉树的结点入队列、出队列,当出队列的结点为空时停止循环,然后再循环出队列判断,若所有结点都出队列前遇到非空结点,则不是完全二叉树,否则是完全二叉树。二叉树的深度是左、右子树中深度最大的那个,因此可以先递归计算出左子树的高度和右子树的高度,较大的高度再加上1(根结点),即为二叉树的高度。因此当结点为空时直接返回0,然后递归计算左子树的结点,加上递归计算出的右子树的结点,再加上根结点的个数,即为二叉树的结点个数。②解决:递归解决子问题,子问题足够小时,直接解决。
2025-06-05 20:21:32
798
原创 【数据结构】树形结构--二叉树
如图是一个现实生活中的树,观察可以发现,一棵树只有一个主干,而主干又会分出许多枝干,这些枝干可能会再分出更多枝干,最后以叶子结束。树型结构在现实世界广泛存在,如人类社会的族谱和各种社会组织机构都可以用树来形象表示。数据结构中的树与现实的树类似,下图中的三种都是数据结构中的树。树也是由结点构成的有限集合。我们将树定义为:①.有且仅有一个结点被称为根结点(root)②.剩余结点又可成为互不相交的集合,每个集合本身是一个树,也是根结点的子树。
2025-05-27 22:54:27
961
原创 【C语言】编译链接预处理
图片左侧是源代码,右侧是预处理得到的.i文件,我们会发现不仅将头文件展开了,还将宏定义“#define M 100”语句删除,将代码里的M替换成了100。让我们梳理一下完整的流程:1.你写代码:创建main.c2. 预处理:展开头文件和宏定义,生成main.i3. 编译:将预处理后的文件转成汇编代码,生成main.s4. 汇编:将汇编代码转成机器码,生成main.o5. 链接:将目标文件和必要的库文件链接成可执行文件my_program。
2025-05-20 11:01:40
695
原创 【数据结构】线性表--队列
情景引入:你们在用电脑时有没有经历过,机器有时会处于疑似死机的状态,鼠标点什么似乎都没用,双击任何快捷方式都不动弹。就当你失去耐心,打算reset时,突然它像酒醒了一样,把你刚才单击的所有操作全部都按顺序执行了一遍。这是因为操作系统在当时可能CPU一时忙不过来,等前面的事忙完后,后面多个指令需要通过一个通道输出,按先后次序排队执行造成的结果。
2025-05-17 22:05:20
1379
原创 【数据结构】线性表--链表(二)
带头双向循环链表可能结构稍微复杂,但是优点是在任意位置插入删除结点的时间复杂度都是O(1), 缺点是以结点为存储单位,不支持随机访问。
2025-05-09 10:47:31
960
原创 【数据结构】线性表--顺序表
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。//使用typedef为类型起别名,存储其他类型的数据时也方便修改//例如存储double类型的数据时直接将int修改成doubleint size;//记录当前实际存储数据的个数//顺序表容量大小}SL;//将struct SeqList简写为SL上述是动态顺序表的各个函数操作实现,以下是动态顺序表全部实现。小tips:尽量写完一部分代码就调试一部分代码,否则可能出现代码全部写完,但出现很多报错无从下手的情况。
2025-05-01 16:27:20
1007
原创 【C语言】sizeof和strlen的区别
②如果是计算逐个赋值的字符数组长度,则会出现随机值,因为逐个赋值的字符数组需要自己添加‘\0’,否则strlen会一直往数组后面寻找‘\0’,导致出现错误结果。sizeof是一种操作符,计算的是变量或者类型在内存中所占空间的大小,返回值为一个无符号整型(size_t),可以用%zd来打印。strlen是一个C语言库函数,功能为计算字符串或字符数组的长度,使用时需包含头文件,返回值类型也是size_t。①strlen统计的是‘\0’之前的字符串长度。
2024-11-06 19:37:15
259
1
原创 【数据结构】算法复杂度
T(N)函数计算了程序的执行次数,运行时间=每条语句执行时间×每条语句执行次数,在实际中每条语句执行的时间差别是微乎其微的,因此执行次数就可以程序时间效率的优劣。在计算机科学中,算法的时间复杂度是一个函数式 T(N)=O( f(N) ),它定量描述了该算法的运行时间,时间复杂度主要衡量算法运行的快慢。函数运行时所需要的栈空间(存储参数,局部变量等)在编译期间就已经确定好了,因此空间复杂度主要看的是函数运行时候申请的额外的空间。①.集合:结构中的数据元素除了“同属于一个集合”的关系外,别无其它关系。
2024-10-14 19:29:43
653
1
原创 【C语言】动态内存管理
之前的博客里面讲到过变量创建的本质是申请空间,但是这是一次性开辟的一块固定大小的空间,所以难免会出现空间分配过大,或者分配不足的情况,因此这时候我们要学习一个新东西,那就是动态内存管理。返回重新分配的空间的地址,可能是原来ptr所指向的地址,也可能一个新的地址。上面的代码有一个很大的问题,就是动态开辟一块空间使用完之后没有释放掉,这时我们就需要free函数来释放和回收动态开辟的空间。②.原空间后面的空间不足,寻找新的空间,并将原空间的数据移植到新的空间后,将原空间内存释放。分配一块内存空间,单位是字节。
2024-10-10 19:13:51
1623
5
原创 【C语言】自定义类型:结构体(一)
一.结构体变量二.结构体变量的定义三.结构体类型和结构体变量四.结构体变量的访问五.结构体变量初始化六.补充结构体变量的定义有三种方式:①. 先定义结构体类型,再定义结构体变量。形式如下:struct 结构体名成员列表结构体类型 变量名列表;int age;char sex;②. 定义结构体类型的同时定义结构体变量。形式如下:struct 结构体名成员列表;}变量名列表;int age;char sex;}s3,s4;
2024-10-07 17:16:47
881
1
原创 C语言:整数和浮点数在内存中的存储方式
1.C语言数据类型大致可以分为两种:内置类型(系统自带的数据类型)、自定义类型(自己创造的,如结构体struct)。其中内置类型可以分为字符型、整型、浮点型、布尔类型。今天主要讲讲整型和浮点型数据在内存中的存储方式。
2024-09-11 20:46:57
400
1
原创 俺的博客!
2>编程规划:对于现在的我来说,编程目标就是大二学完就业课全部课程,参加一些计算机竞赛,取得一定成绩,之后如果选择读研的话,就考上家附近的985;<3>学习方法:现在暑假的话每天就学个四五个小时,多练习多实践,不会的地方多思考,多问老师,之后开学每天也抽出一两个小时去完成每日的任务。<4>学习计划:假期的话每天四五个小时,一周大概二十个小时左右(偶尔要出去玩放松一下嘛),上学的话每天一两个小时,一周十个小时左右。<1>个人简介:我叫w,是一名准大二计算机专业的学生,目前还在努力学习一些基础的计算机知识。
2024-07-25 15:44:10
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人