自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(65)
  • 收藏
  • 关注

原创 C语言希尔排序详解!!!速过

由于第一步的开荒,数组比刚开始有序的多但还是模糊,接下来如果我们把间隙改小,那每一个小组的数字就会增多,但又由于之前第一组的原因其实有些数据已经其实已经到了属于自己的位置,那接下来就会减少损耗(不用交换数据)。总的希尔排序,就是先分组,在排序,每次使模糊的答案清晰一点(每一次的损耗都会减小),最终当gap == 1时,只需轻轻擦拭即可得出答案。这一阶段呢就是要将每个组进行一个排序让其每个组都是有序的,这样形成一个散乱但比之前更有序的结果,可以从图中第一轮结果看出。首先传入一个数组a,和数组个数n。

2024-02-16 17:20:19 684

原创 快速排序详解!c语言

如果left(begin)先走,如果只有最后一个数字比key大这时begin 和 end 相遇,反而把key换到了最后一个位置,而唯一比key大的数字反而去了第一个,那就不满足,左小右大的原则了。快速排序顾名思义,快速的排序,事实也如此,他的应用面广泛同时确实很快,因为他的时间复杂度是o(nlogn),相比前面的(插入冒泡选择)三小只来说,它的速度确实遥遥领先,但相对的思想也更复杂。为什么要从right开始,因为你的key在数组的第一个位置,所以最后一次和key交换的数据一定要是比key小的。

2024-02-16 17:19:16 900

原创 插入排序详解!!!(简单排序),基本功排序C语言版

这是一个插入排序的流程图,插入排序 很像我们玩斗地主,玩牌,斗地主在开始前,我们是不是要给我们手上的牌排序啊,假设我们理牌有一个规矩就是只能一张一张拿起来。并且我们给牌换位置也只能一张一张换。不能中间跳过一张直接换(因为机器和人脑不同)那我们拿起第一张的时候,和上图一样我们拿到一个3,那现在就只有一个3,你也不用排序但我们拿到第二张的时候,这时有两张牌,拿到的是5,它确实比3大,那5就在3的后面就好。

2024-01-05 15:14:57 551 1

原创 选择排序!!!基础排序详解 C语言版

这是一个选择排序的流程图,其实很简单,就是每次挑选数字中最小的作为第一个 ,直到整个数据有序就结束了顾名思义,选择,那就是选取,选取其中最小的,放在最前面的位置,已经选好的位子,下一次就不加入选择了。每一次安排一个位置,直到所有位置都安排了。

2024-01-05 15:14:53 451

原创 C语言 二叉树详解(自我理解版)!!!二叉树的实现

(就如果J 是 E的右节点的话,那E的左节点就没有数据就浪费了一个空间)这里的父节点和子节点的计算可用 公式 child = parent / 2 + 1 (左节点)或 + 2(右节点).。当然既然是链式结构,上面的顺序结构可以找到父亲节点,那链式结构也有办法找到父节点,这就要用的三个指针的结构体,左右孩子节点,再加上父亲节点的指针。如图这是一个完全二叉树,完全二叉树与普通二叉树之间的差别在于,完全二叉树 的每一个子节点必须先有左边的子节点,才能有右边的子节点。:一棵树中,最大的节点的度称为树的度;

2023-12-12 20:37:43 1226

原创 C 语言 二叉树的实现详解!!!(每种方法都详细解释,哪里不会看哪里)

(建议先看后续遍历,就是先遍历全部节点,在进行操作)进行从遍历的最后一个节点开始,进行free,如果用前序遍历free的话,那你第一个根节点都free了你就找不到你的子树了,而中序遍历的话,就比如你刚把D删除了,中序遍历的话就会把 B先删除,那就找不到E节点,E节点就没被删除。那也就明了了 中序遍历就是 你先把左边走到 底 然后 先打印左边,在打印根的,在打印右边的。就像这里的打印的一样,你先把A打印出来了,然后 在走你的左边,打印出B后继续走B的左边,打印出D后,返回到B节点,B又走他的右边 打印E。

2023-12-12 20:35:23 1124

原创 c 语言 堆的解析(自我理解)!!!堆排序,建堆

首先先看一个图片小顶堆的意思就是顶 的元素最小,两个子节点的元素要大于父节点。大顶堆同理。小顶堆就像是一个金字塔。第一层很小,然后后面是依次增大,就像社会人才金字塔图一样。大顶堆就可以想做,每个人的财富拥有值的金字塔图,上层人的钱很多,而底层的人钱最少。那堆能干嘛呢,首先堆是可以用来排序的,而且排序的时间也是较快,处于(n*logn)这个层级。还有一个就是在频繁的出队和入队时,用堆是一个不错的选择。如果用数组和链表来完成pop和push时,时间复杂度是O(n)而用 堆就是O(log n)。

2023-12-08 18:36:18 1133

原创 循环队列详解!!c 语言版本(两种方法)双向链表和数组法!!

首先关于循环队列,你得先知道什么是队列,详情可以去看看我的另一篇博客数据结构 栈与队列详解!!-CSDN博客这里简单的说一下,队列就是字面意思,你在银行排队,你不是什么VIP只是普通人,那你先排队那你就先得服务,队列就是 你先插入的数字(入队),就得先放出(出队)。大致就是这个意思。而循环队列呢?他的原理也是队列,但和队列不同的地方在于,他的空间是固定的。在一个空间里进行重复的入队出队。这是一张循环队列的大致图。其中和队列一样有两个指针指向头和尾。添加实在尾针处加,而删除就是将队首的元素删除。

2023-11-22 14:11:41 218

原创 数据结构 栈与队列详解!!

关于内存中的栈和数据结构中的栈是不同的,本章着重讲的是数据结构的栈。这是一张关于栈的表达图。从图中可以看出栈很像是一副卡牌,发牌时只能从上取出,即出栈。而入栈则是像你出牌后,要把你出的牌压在上一张出的牌上面。这是入栈。栈可以用链表或者顺序表实现,

2023-11-18 18:55:13 348 2

原创 环形链表解析(c语言)c语言版本!自我解析(看了必会)

就以这个为例,当slow走到2的时候,fast已经走到-4,那他两距离相差1,下一次fast和slow必定相遇,因为两人每次走的距离差为1,把slow入环时两者的距离记作N,因为两者的距离差为1,N-1-1-1-1-1......N总有被减到0的时候,减到0那两者就是在一个位置,就相遇了。这就是最普遍的快慢指针,fast走的是slow的路程的两倍,这就是相当于一个追击问题,再跑1000米的时候,你的好朋友的配速是你的两倍,最终他会超你一圈一个道理。就是L的距离等于这么fast走的这么多圈后减掉 X的距离。

2023-11-12 14:00:19 173

原创 贪吃蛇(c语言)!!源码加解析

1.建议先把源码拿去VS中测试一下了解这个贪吃蛇是什么样的1.建议先把源码拿去VS中测试一下了解这个贪吃蛇是什么样的。

2023-11-11 14:54:42 484

原创 双链表!!!

双链表的全称叫做带头双向循环链表,它有个头节点叫做“哨兵位”。哨兵位不存储数据。“哨兵位”存在的意义:遍历循环链表避免死循环。单链表的全称叫做不带头单向不循环链表。区别就是双链表一个格子里要存储前一个空间的指针和后一个空间的指针,然后双链表的尾节点的next指针是指向头结点的,形成一个循环。

2023-10-24 14:21:02 43

原创 单链表(第二部分)单链表的实现!!!

为什么一些接口的参数是二级指针一些是一级指针?因为二级指针可以对 头结点pphead 进行更改,如果只是一级指针的话形参只是一个局部变量并不能更改 pphead 的值。就假如一个 add(int a,int b),你的两个形参都是int并没有用 int * 接收的话,那么传入的值是不会更改的。

2023-10-23 10:41:03 45

原创 单链表,三部分详解(第一部分)单链表的解析

下面的代码表示单链表的节点。假设每节车厢放着下一个车厢的钥匙,你在走到这一节车厢的时候,就能拿到下一节车厢的钥匙,进入下一节车厢,链表就像一大节火车,你在淡季的时候可以把车厢减少一点,旺季的 时候可以多加一点,不会影响其他车厢的使用。这样就相当于往一个结构体里放进一个同类型的结构体指针,就可以同个这个指针指向下一个结构体。链表就是一个在物理储存上非连续,但在逻辑顺序上是连续的指针链接实现。与顺序表不同的是这样的每节车厢的独立空间,我们叫做“节点或结点”。这个节点要保存的是一个数据,和下一个节点的指针。

2023-10-23 09:30:11 48

原创 顺序表第三节(通讯录基础版)

查找通讯录和删除的前提都是一样的,都是用 findbyname 函数找到对应位置的通讯录。这个函数作为中间函数,可以不用写在头文件里,但对于后面几步的操作确实必不可少的。首先这个函数查找的是 用名字找位置(当然你也可以用其他的变量的值作为查找值)。如果返回的是 i 那就是大于0 的,反之为-1 (上面特殊函数的返回值)。如果大于0就代表找到了,利用顺序表删除的接口,删除这一格的通讯录信息。传入两个参数第一个是要查找的通讯录的指针,第二个则是要查找的姓名。让别人输入4个变量的值的过程,也很简单都是基础!

2023-10-21 09:59:09 218

原创 顺序表(第二节)实现和解析

3.对于一个开辟的表的内存,如果size--就说明有数据的空间-1. 下次在插入表数据的时候,直接使用这个空间,这样就是类似一个抽象的删除,因为下次添加数据还是用的这块内存,所以你不用给这块空间的数据清空也可以使用。为什么是 i = ps size -1,因为 ps size 的值 是表示 有数据的空间个数,而对于空间的下标来说,ps size 这个数字的空间下表指向的反而是下一个无数据的空间。4.为什么要判断是否为0呢?判断ps->a的原因是,判断这个指针是不是为空,如果为空,会不执行任何操作直接返回。

2023-10-17 21:13:10 146

原创 顺序表第一部分(介绍篇),三部曲后面分别是实现和介绍

1、顺序表的概念及结构1、顺序表的概念及结构。

2023-10-17 18:33:45 76

原创 编译和链接(小白初理解)

1.翻译环境和运⾏环境1.翻译环境和运⾏环境翻译环境指的是:这个环境中讲我们输入的代码转换为机器可以执行的指令执行环境指的是:就是用来执行代码的,程序的样子。

2023-10-17 13:35:20 40

原创 文件操作 !!C语言

1.为什么使⽤⽂件?首先,没有文件数据没法保存。文件就是用来存东西的,如果我们没有文件,我们写的程序都是存储到内存中,如果程序退出,内存就会回收,数据就没了。就像你在 剪辑视频,你忘记保存了,软件的自动保存时间也没到,电脑断电了,这时你的所有数据就G了都没了。但如果我们把数据都保存到文件里了,下次使用打开文件就可以了。数据依然存在。2.什么是⽂件?文件就是你存在C盘 D盘这些盘里的东西都是文件。但在程序设计中我们一般说的文件有两种:程序文件和数据文件。

2023-10-16 20:50:05 53

原创 联合和枚举!!详解

1. 1联合体类型的声明和结构体类似,联合体也由成员变量组成,这些成员可以是不同的类型。不同的是:联合体只为成员变量里最大的成员提供足够的内存空间。联合体是所有成员共用一块空间。所以也可以叫做共用体。这段代码的结果是 4. 说明联合体只开了 4个字节的空间,说明开辟了int 的空间为最大空间。1.2.联合体的特点因为联合体是一堆成员变量共用一个开辟的空间,所以为了让所有成员都进入得了,所以开辟最大的类型变量的空间,(联合体的引用就是每次取出一个变量)看下面两串代码。

2023-10-14 10:36:45 63

原创 结构体,位段!

1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。int _b : 5;打印出来为8,说明这里有8个字节,上面有4个int 不应该是12个字节吗?1.位段的成员可以是或者是char等类型2.位段的空间上是按照需要以4个字节(int)或者1个字节(char)的⽅式来开辟的。3.

2023-10-13 15:04:35 123

原创 结构体详解!!!

1.结构体类型的声明1.结构体类型的声明结构体就是一些值的集合,然后将这些值成为成员变量。成员变量可以是不同的类型的变量可以用结构体表示一个学生的数据。(其他物品的数据也可以表示),下面是一个描述学生的结构体。这个结构体的名字叫做stu 类型是struct stu 里面有三个成员变量。并且在下面还创建了一个结构体变量 s。当然在其他函数下也可以创建变量,int i = 0,创建的是一个整型。那结构体 的创建就是这样 struct stu yang = {0};下面是对结构体变量进行赋值。

2023-10-11 15:15:56 75

原创 指针详解第三部分

1.字符指针变量1.字符指针变量一种指针类型为字符指针 char*(下面有两个代码表示了两种不同的用法)第一个代码 存了一个字符w。将字符 w 存到了 变量ch的地址上。第二个代码 存了一个字符串。和第一个 指针pc 不同,他不是把 hello bit 存到了pstr 的地址里。而是由pstr 指针指向第一个字符h 的地址。然后找到这串字符。

2023-10-04 11:12:09 97

原创 指针详解第二部分

parr[i][j] 的原型就是 *(*(parr+i)+j ),先取出parr+i 的元素 再取出 parr +i + j 的元素。(整个数组的地址如果加一则跳过整个数组,如果只是首元素的地址,那加一只是到下一个元素的地址。数组传参本质就是,传数组名就是传数组首元素的地址,所以sz2 =1,但 sz1求得是函数外的数组大小所以 = 10.说明用指针来接收数组名,其实是可以计算出数组大小的,因为指针指向的是数组首元素的地址,所以间接就可以计算元素个数。打印出来的结果是一样的,说明指针可以访问数组。

2023-10-03 19:19:30 162

原创 数据在内存中的存储(一个新手的理解)

超过一个字节的数据在内存中存储时,就有存储顺序的问题,按照不同的存储顺序,我们可以把分为大端字节存储和小端字节存储。在不同的编译器中不同。大端存储:通俗来说就是数字的比较大的位数存到了前面。就像 0x11223344,如果为大端存储的话那在内存里面 先存储的就是 11 22 33 44,和上面的图片相反小端存储:就是数字的比较小的位数存到了前面。和上图一样!!!一个自编小口诀,前大大,前小小。就是前面如果是数字位数大的数字的话就是大端存储,反之相同。

2023-10-03 10:33:58 92

原创 字符函数和字符串函数!!,学起来奥

但参数1字符串中出现,参数二中的字符时,会将这个字符符号,改为‘\0’ ,返回的指针是指向的是这个字符串的开头,就类似 字符串 abc,d。和 第二个参数为 ,。那返回的就是a的地址,打印出来的是字符串为abc。第一个参数是 目的地参数,用来 作为主参数,而第二个 source 则是 发源地参数,用来更改目的地参数,第三个参数num 则是用来控制 要更改的字节个数。具体用法和strcmp 一样 只是多出 一个控制字符的 numble 参数,区别和上面的 strncpy 和 strcpy 的区别一样。

2023-09-19 13:40:34 68

原创 strstr的使用和模拟实现

之后cp++ 让cp的地址+1,在进行检视,这时 第一个字符串就变为了 yangjianglong ,然后检视后发现 *s2 已经变为 ‘\0’ 就是 4个字符都相同时。第二个while循环的意思是 *s1 和 *s2 不为 0 和 *s1 - *s2 为0时进入循环。如果在*s2还没为 ‘\0’ 时循环就结束,就是像 yyangjianglong 和 yang 字符串,因为第一个字符串前面有两个y 函数会从 出现 第一个 y 开始检视,发现第二个字符不同时就跳出了循环。*s2 为 0 的话就返回 cp。

2023-09-17 11:02:41 64

原创 strcmp的使用和模拟实现

如果相等 两个参数的地址+1,在向下比较,直到出现不同,比较出结果。因为前面的yang是相同的,那么就从 j 和 z 比较。返回int 的原因是 原本的 strcmp 返回的是 大于 0 的数字 和 0 和 小于 0 的数字。返回 *str1 - *str2 的意思是,返回这时候两个地址内的值差。用const 来限制 两个 参数,因为两个参数都是不能更改的,只是比较。第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字。第⼀个字符串⼩于第⼆个字符串,则返回⼩于0的数字。第⼀个字符串等于第⼆个字符串,则返回0。

2023-09-17 10:27:00 81

原创 strcat的使用和模拟实现

第二个while 循环的意思是 将解引用的 dest 同位置的值改为 src 的位置的值,说人话就是在dest 后面 添加 src 字符。字面意义,就是将两个字符串接起来(就像人体蜈蚣),需要传入两个参数,第一个参数用来作为头部,第二个参数则是用来则为尾部,贴在一参数的尾部。用一个 ret 指针 接收 dest 是为了之后 返回的是 dest 的首地址。例如,字符串 “yangjianglong” 作为第一个参数,字符串“mzq” 作为第二个参数。⽬标空间必须有⾜够的⼤,能容纳下源字符串的内容。

2023-09-17 09:50:43 135

原创 strcpy函数的使用和模拟实现

形参中destination则是将 source 的复制品,打印在相同的位置,就像 字符串 yangjianglong 作为destination。因为 函数只是改变 dest 变量,而不改变 src变量,所以src 用 const 限制起来,起到保护作用,防止src 被更改。将 dest 指针,用 指针变量 ret 接收,是为了,在函数结束后仍然返回的是 dest 的首地址。这里while循环的意思是,解引用两个变量,更改 dest 同位置的值为src 同位置的值。4.目标空间必须可变,不能被限制。

2023-09-17 09:30:40 59

原创 指针详解(看完直接起飞) 第一部分,分5个部分。(无杂乱图纯享版)

如果我们创建了一个 int a = 0变量,要怎么找到他的地址并且利用他呢,就要用到&符号,这个符号可以取出变量a的地址,因为a的类型是int 所以占4个字节,前面的0x十六进制数字就是a的地址,房间号。就比如一个数组,给员工开了10个房间,p 是老板,他根据房间找了 每个员工,可这一层还有许多房间,p 老板忍不住,打开了其中一间,结果里面有一伙罪犯,老板直接gg。这里的代码的意思是,*p 指向的是 一个 函数的 返回值,但返回的这个 n 的地址,其实已经没有了,因为n 是一个局部变量,利用完后就没了。

2023-08-27 12:32:05 108 2

原创 交换两个整数,自己写一个swap库函数,简单!!!

题⽬描述:写⼀个函数Swap,可以交换两个整数的内容。注意必须实现成函数完成。输⼊2个整数,调⽤⾃定义函数Swap,完成2个整数的交换。先看代码,下面有解析奥!!

2023-08-27 11:56:42 1216

原创 字符转换,大小写转换。简单题!!!有几个库函数的使用方法

然后用while循环,当然也可以使用for循环,for循环就是遍历到 出现\0 为止。这里用while循环,表达式给的buf[ i ] 因为下面有i ++ ,随着i ++ 最终 会出现 \0. \0 也相当于0,所以就为假,跳出循环。循环内的 判断语句则就是判断字符串中的每个字符是 大写字母还是小写字母。

2023-08-27 11:48:31 91

原创 找出盗窃者,找出说慌者,理解题!!(一看就会奥)

题⽬描述:某地发⽣了⼀件盗窃案,警察通过排查确定盗窃者必为4个嫌疑⼈的⼀个。以下为4个嫌疑⼈的供词:A说:不是我。B说:是C。C说:是D。D说:C在胡说已知3个⼈说了真话,1个⼈说的是假话。现在请根据这些信息,写⼀个程序来确定到底谁是盗窃者。先看代码,下面有解析。

2023-08-27 11:25:02 108

原创 计算最⼤值和最⼩值的差值,新手题,一看就会!!!

输⼊10个整数,写代码找出其中最⼤值和最⼩值,计算最⼤值和最⼩值的差,并打印出差值结果。

2023-08-26 11:42:44 92

原创 分数求和,新手题!!一看就会,计算 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - … + 1/99 - 1/100 的值。(两种方法)

计算 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - … + 1/99 - 1/100 的值,并打印出结果,(注:除法分为整数除法和浮点数除法,要计算出⼩数,得采⽤浮点数除法,浮点数除法的操作数中⾄少要保证有⼀个浮点数。先给代码,解析在下面奥!!!(有两种方法)

2023-08-26 11:31:30 711

原创 打印最小公倍数,简单题!!(看了必会奥)

先看代码,下面有解释奥!!。(下面有辗转相除法看了就会奥。

2023-08-25 12:04:25 30

原创 判断三角形,简单题,新手必会!!!

因为三角形两边之和大于第三边,故先判断三边关系,如果两边之和大于第三边,则进入第一个if 语句内部,判断其是否是特殊三角形。&&的意思类似于数学里的并且,即 这个符号两边都是真才是真,有一边为假,那整体判断为假。|| 的意思类似数学里的 或 ,即符号两边只要有一个真即可,整体就为真。首先输入三个数字,作为三角形的三边。如果不是则不是三角形。

2023-08-23 11:37:38 54

原创 打印99乘法表,简单题,新手必会!!!

首先你要知道99乘法表有9行,每一行的式子随着数字的加大而增多,就像第一行只有1 * 1= 1,第二行就有2 * 1 = 2, 2 * 2 =4。第二个for循环则是用来控制 j 变量的变换,但它最多只能和 i 一样大,为什么呢,因为 乘法表每一行的 相乘的两个数字,后一个 总是 比 前一个小的,所以乘法表像是一个直角三角形。一行的式子比一行多。第一个for循环则是用来控制换行printf(“\n”),和控制 i * j 的式子,就是 1 * 1 = 1 ,2 * 1 =2。的前面的第一个数字的。

2023-08-23 11:22:38 444

原创 打印1-100的奇数,简单题,一看就会!!

【代码】打印1-100的奇数,简答题,一看就会。

2023-08-23 11:12:08 293

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除