- 博客(24)
- 收藏
- 关注
原创 数据结构之二叉树(1)
在前面的数据机构中,我们学习的都是线性表。而树是一种非线性的数据结构,它是由n个有限结点组成的一个具有层次关系的集合。顾名思义,它看起来像一颗倒过来的树。也就是根朝上,而叶朝下。每棵树都有一个根结点。除根结点外,其余结点被分成多个互不相交的集合。每个集合又是一颗子树。每颗子树都有一个根结点,可以有0个或多个后继。所以树是递归定义的。树的一些特性:在树形结构中,我们最常⽤的就是⼆叉树,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。二叉树具有
2025-09-06 15:49:51
452
原创 数据结构之队列
同栈一样,我们先思考一下底层使用数组来实现还是用链表。入队列时:数组可以直接入队列,没有太多浪费。链表可以设计一个ptail指针,也直接插入即可。出队列时:数组头上出数据,效率会比较低。链表直接头删,效率高。综上,我们使用链表来实现。//定义节点结构}QueueNode;除了结点以外,我们需要定义队列本身。它由两个指针构成,一个指向链表的头结点,一个指向尾结点。//定义队列//队头//队尾}Queue;//队列初始化assert(pq);
2025-09-06 11:53:16
642
原创 单链表的几道算法题(1)
在数据结构的学习中,不仅要理解底层代码实现,还要多做算法题来巩固。下面我给大家列出几道用单链表解决的算法题。如果对单链表的知识有疑问的话,我上次博客就是对单链表的讲解。欢迎大家收看。
2025-09-04 15:41:57
910
原创 数据结构之单链表
火车是由多个车厢组成,类比一下,链表也是由多个“车厢”组成的,这样的车厢我么叫做“结点”。那么我们只要定义了结点,并加以链接,链表就形成了。我们一定会存储数据,所以结点中一定会有数据。我们怎么把节结点连接起来呢?答案是指针。另结点中存在指针,指向下一个结点。于是,结点就定义出来了。例//创建一个链表//为了方便,这里没有检查是否成功开辟,大家注意那么为什么我们要用一级指针来定义各个结点呢?
2025-09-04 10:59:00
575
原创 数据结构之顺序表
百度百科中是这样解释的:但是没有单一的数据结构能适用于所有场景,所以我们需要学习多种数据结构,今天我们学习的就是一种最基本的数据结构----顺序表。
2025-08-25 23:07:23
891
原创 sizeof与strlen对比
当你使用 sizeof(a++) 时,编译器关注的是 a 的类型,而不是 a++ 这个表达式的计算结果。因此,a++ 这个自增操作不会被执行,a 的值也就不会改变。:sizeof 运算符在编译阶段就会确定其结果,它不会对操作数进行实际的求值操作。sizeof:求字符串长度,统计的是\0之前的字符个数。sizeof:计算变量所占内存空间大小,单位是字节。主页还有更多优质内容 OvO。
2025-08-10 16:14:09
157
原创 C语言之指针(5)
由于我们目前只学习了冒泡排序一种排序算法,实现qsort函数我们也用冒泡排序来实现. 之后我们学习了其他排序算法后,大家在进行替换qsort需要四个参数,前三个是固定的,只需要考虑第四个,而看过上面的例子我相信大家已经知道compare函数怎么写.详细一点解释:如果把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其指向的函数时,被调用的函数就叫做回调函数。qsort(quick sort)是c语言提供的一个排序函数,是基于快速排序算法思想实现的一种排序方法。主页还有更多优质内容 OvO。
2025-08-10 11:36:38
347
原创 C语言之指针(4)
二维数组可以看成每个元素是一维数组的数组,也就是二维数组的每个元素就是一维数组,那么二维数组的首元素就是第一行,就是一维数组。结合,说明p是一个指针变量,然后和[10]结合,说明指针指向一个大小为10个元素的整形数组。上面代码的意思是把⼀个常量字符串的首字符 h 的地址存放到指针变量 pstr 中。存放的是字符变量的地址,指向字符型数据。parr先和[ ]结合,说明parr是数组,数组的内容是什么呢?我们在学习一维数组传参的时候了解到传入的参数是数组的首元素就行。数组指针存放的就是数组的地址,指向数组。
2025-08-07 11:29:58
684
原创 C语言之指针(3)
我们发现&arr[0]和&arr[0]+1相差4个字节,arr和arr+1相差4个字节,是因为&arr[0]和arr都是首元素的地址,+1就是跳过⼀个元素。因为arr是数组首元素的地址,所以我们在test函数内部用指针变量接受的就是一个地址,自然sizeof(arr)计算的就是一个地址的大小。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数组中的元素。我们可以发现:一维数组传参,形参的部分可以写成数组的形式,也可以写成指针的形式。
2025-08-03 11:10:43
544
原创 C语言之指针(2)
这是因为我们把a,b当作函数的参数传入时,在swap函数内部创建了形式参数x和y接收a,b的值,但是x和y的地址并不是a,b的地址,自然不能改变a,b的值。如果括号中的表达式为真,程序会继续运行,否则assert()就会报错,在标准错误流stderr中写入一条错误信息,显示没有通过的表达式,以及这个表达式的文件名和行号。const如果放在 * 的右边,修饰的是指针变量本身,保证了指针变量的内容不会改变,但是指针指向的内容可以通过指针修改。但是如果我们绕过n,使用n的地址,就可以修改n了。
2025-07-31 22:07:38
779
原创 C语言之指针(1)
我们知道计算机上中央处理器(CPU)在处理数据的时候,需要的数据是在内存中存放的,处理后的数据也会放回到内存中。前⾯的内容我们了解到,32位机器假设有32根地址总线,每根地址线出来的电信号转换成数字信号后是1或者0,那我们把32根地址线产⽣的2进制序列当做⼀个地址,那么⼀个地址就是32个bit位,需要4个字节才能存储。我们可以这样理解,32位机器有32根地址总线,每根线只有两态,表示0,1,那么一根线的含义就有两种,两根线就有四种状态,以此类推,32根线就有2的32次种含义,每一种含义都代表一个地址。
2025-06-07 17:20:54
866
原创 C语言操作符详解
算术操作符:+ 、- 、* 、/、 %移位操作符:<< 、 >>位操作符:&、 | 、^赋值操作符:= 、+=、 -=、 *=、 /=、 %= 、<<= 、>>= 、&= 、|= 、^=单⽬操作符:!、++、–、&、*、+、-、~ 、sizeof、(类型)关系操作符:> 、>= 、< 、<= 、 == 、!逻辑操作符: && 、||条件操作符:?逗号表达式: ,下标引用:[]函数调用:()结构成员访问:. 、->今天我们介绍其中的一部分。
2025-05-04 21:14:49
1052
原创 C语言数组和函数实践:扫雷游戏
在用户输入坐标后,先判断是否合法,不合法就重新输入,合法就再根据此坐标是否是雷再选择是否调用leicnt函数,并改变展示数组的值,最终输出到屏幕上,而这里我们就会发现如果当周围雷的个数是0的时候,用户输入会繁琐,这里我们设计了一个递归函数,起名digui。首先是周围雷的个数是0才可以进入到这个函数,进入以后双层循环的功能是遍历坐标周围八个cnt的值,根据是否是0选择是否往深继续递归,如果不是0,就令展示数组的值改变,并最终在Findmine函数中打印展示数组。扫雷.c //⽂件中写游戏中函数的实现等。
2025-04-24 19:55:30
1168
原创 C语言函数第二讲
return 0;day += 1;return day;在vs2022会出现下面的警告信息:是因为C语⾔编译器对源代码进⾏编译的时候,从第⼀⾏往下扫描的,当遇到is_leap_year时,并没有发现前面的定义。那怎么解决呢?就是函数调⽤之前先声明⼀下is_leap_year这个函数,声明函数只要交代清楚:函数名,函数的返回类型和函数的参数。如:int is_leap_year(int y);这就是函数声明,函数声明中参数只保留类型,省略掉名字也是可以。
2025-04-20 11:21:03
1033
原创 C语言函数
和库函数一样,形式如下ret_type fun_name(形式参数) {ret_type是函数的返回类型fun_name是函数名括号中是形式参数大括号之间的是函数本体。
2025-04-18 15:32:06
676
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人