- 博客(13)
- 收藏
- 关注
原创 链表以及简单的接口实现
Tips:传参时不能直接传递插入的链表地址,因为形参为临时变量,如果头指针为空,第一个链表直接拷贝进形参并不能改变实参中的链表,因此需要传二级指针。链表可分为:单向与双向链表,带头与不带头链表。我们最常用的还是两种结构:不带头单向非循环链表,带头双向循环链表。链表不同于顺序表,顺序表在物理存储结构上连续,而链表是非连续非顺序的,其中间的元素是通过一个个指针所连接起来的。不带头单向非循环链表结构简单,多数情况下是以其他数据结构的子结构出现。由此可看出,链表的特点就是在物理上不连续,在逻辑上连续。
2023-09-30 18:51:38
206
原创 顺序表以及简单的接口实现
顺序表是使用一段连续的存储单元来存放数据的,一般采用数组存储,需要修改时就在数组上进行增删查改。顺序表一般可分为两种:1.静态顺序表即存储空间大小是固定不变的。//静态顺序表int size;2.动态顺序表相比于静态顺序表,动态顺序表能够动态开辟内存空间,存储空间可大可小。当存储空间不够时,可以进行扩容。//动态顺序表//动态空间起始地址int size;//存储有效数据个数//空间大小}SL;
2023-08-07 18:31:34
84
1
原创 关于双指针解题
思路:使用两个指针begin和end(从第二个元素开始),begin依次遍历数组中的每个元素。如果begin所指向的元素与前一个元素不同,则意味着这个数是第一次出现,将其放在end所指向的位置中,然后end向后挪一位,否则这个数就是重复数,end不变,begin++。如果nums1先遍历完成,nums2还会有一部分元素没有被合并,因此我们还需要再合并一次,直接把nums2中剩余的元素放到nums1数组的最前面。比较指向的元素,把较小的那个放到前面,然后对应的指针加一。,返回删除后数组的新长度。
2023-08-06 21:49:43
85
原创 梳理文件管理基本知识
文件可分为两种:程序文件和数据文件。功能函数名适用于字符输入函数fgetc所有输入流字符输出函数fputc所有输出流文本行输入函数fgets所有输入流文本行输出函数fputs所有输出流格式化输入函数fscanf所有输入流格式化输出函数fprintf所有输出流二进制输入fread文件二进制输出fwrite文件。
2023-07-31 17:24:39
193
原创 动态内存管理
malloc函数向内存申请一块连续可用为size字节大小的空间,并返回这块空间的起始地址。·如果开辟空间成功,则返回空间的起始地址。·如果返回失败,则返回空指针NULL。·malloc返回值类型是void*,因此在接收返回值是需要自己转换指针类型。与此配套,C语言还提供了另一个函数free,用于专门释放回收动态内存空间。C语言还提供了一种函数calloc,也可以来实现动态内存分配。函数的功能是:为num个大小为size的元素申请一块空间,并对空间初始化为0.
2023-07-30 11:13:41
68
1
原创 常用的库函数总结
memcpy函数:用于两个不相关的数组拷贝,函数结束,返回目标空间的起始地址。其中形参为两个地址:目标起始地址,数据起始地址,以及拷贝的字节数。在此需要注意的一点是:形参地址都是void*类型,进行运算时,需要在进行强转类型(强转类型是一次性的临时的)
2023-07-30 09:46:36
287
1
原创 详解自定义类型(结构体,枚举,联合)
有了结构体类型后,定义变量的方法就和int,char等类型一样。int x;int y;}p1;//声明类型的同时定义变量p1//定义结构体变量p2我们可以看到,定义结构体变量有两种方法,一种是在声明类型的同时定义变量,一种是正常的定义变量。但是对于匿名结构体类型来说只能在声明类型的同时定义变量。位段与结构体是类似的,但略有不同。1.位段的成员必须是int unsigned int signed int 或者是char (属于整形家族)类型。
2023-07-16 16:17:33
53
1
原创 函数指针数组的简单应用(计算器)以及qsort函数
我们可以从cplusplus中得到qsort函数的定义,他的形参部分由以下四部分组成:指向需要排序数组首元素的无类型指针,需要排序的元素个数,一个元素的大小,指向一个可以实现比较功能的函数的指针。正如这段代码所示,虽然可以成功实现功能,但代码冗余度太大,我们仔细观察,会发现每次进入case后,只有调用的函数不同,其余都相同,因此我们可以利用函数指针数组来简化代码。因为每种类型的大小各不相同,因此,我们需要知道数组中的元素大小,然后一个字节一个字节的交换,最终实现交换相邻元素。
2023-07-12 10:52:42
154
1
原创 关于指针的基本知识,什么是指针?(小白版)
指针全名为指针变量,我们知道计算机在存储数据是有序存放的,而对于如何能够使用到存放的数据,我们就需要一个门牌号来区别每个数据所在的位置,而这个门牌号就是我们常说的地址,指针变量就是用来存放这些地址的变量。1.指针的大小为固定的4/8个字节(32或64位平台)。2.指针是有类型的,指针的类型决定了指针加减整数时的步长以及解引用指针是的权限。
2023-07-11 21:29:18
870
原创 用C实现简易版扫雷
4.雷的判断:因为我们在之前的准备工作中将无雷区域置为‘0’,有雷区域置为‘1’,所以我们只需要将玩家输入的坐标周围八个坐标进行加和即可得出雷的个数。差异:在三子棋中,我们只使用了一个二维数组就可以完成整个代码的编写,而在扫雷中,我们需要有两个二维数组,一个用来代码的运行,一个用来展示给玩家。二.进入游戏:我们使用Switch语句来判断玩家的选择,1表示进行游戏,0表示退出游戏,若输入为其他数字,则提示重新输入。3.玩家落子:玩家输入坐标,检查坐标的合法性,合法则进行雷的判断,不合法则提示重新输入。
2023-07-03 10:07:53
87
1
原创 用C模拟实现三子棋或多子棋
2.选择是否开始游戏,此处的逻辑为:输入1开始游戏,输入0结束游戏,输入其他数字则提示重新输入,因此这块我们可以选择使用switch选择分支语句。3.玩家落子:玩家输入坐标有两种结果:1.坐标合理,2.坐标不可用,因此使用while循环,坐标合理则跳出循环,否则玩家继续输入坐标。我们使用char定义一个变量:result 用来接收返回结果,如果结果为“*”,则玩家赢,结果为“#”,电脑赢,结果为“c”,则为平局,除此之外,游戏继续。2.初始化棋盘后,需要打印棋盘,但是不能只打印数组,因为还需要打印分割线。
2023-07-02 10:24:43
86
1
原创 二维数组实现杨辉三角
其最左边和最右边的数字都为一,中间的数字等于其上方的两个数字之和。因此我们可以用二维数组的方式来表示数字。1.先表示两边的数字1。2.再表示中间的数字。
2023-06-29 19:32:24
633
1
原创 用编程思维做逻辑题
1.猜名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,编程确定比赛的名次。思路:1.计算机无法进行逻辑上的识别,因此需要遍历全部可能产生的名次,总共有五名选手,所以使用五个for循环嵌套遍历。2.在遍历完所有可能性之后,查看限制条件:比赛结束后,每位选手都说对了一半!针对A的话来说:B第二或者
2023-06-29 17:32:52
164
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人