- 博客(23)
- 收藏
- 关注
原创 拿捏基本排序算法(附源码)
这样当我们走完这一趟的时候,我们的Key是不是来到了刚刚好的位置,那么我们是不是不需要再动这个Key了,所以我们再将区间分成了[left,key-1] key [key+1,right],这三个区间,但是我们的Key已经来到了最终位置,那么我们接下来需要遍历的是不是就是这两个区间的值,所以采取了递归的前序遍历,Key就是我们的根,然后Key的左子树一直走,递归完左树再递归右数,每递归一次就能找到一个Key,确定一个数的最终位置,那么这个递归结束回来后,我们的顺序就排好了。这里的稳定性待会下面会讲到。
2024-01-20 16:34:37
1499
2
原创 快速搞定二叉树(C语言)
简单来说就是我们需要从一堆数据中找到其中最大或者最小的值,但是这个在我们的堆已经实现了,我们需要的是求前十个或者多个的最大值次大值等,这个可以应用于我们日常生活中的美团啊之类的需要搜索哪个店评分最高等实际问题,那么我们应该如何去实现呢?概念:如果一颗树的每一层节点都是满的也就是说,如果这颗树的高度为h,那么这颗树的节点总数就会是2^k -1 会有这么多个节点。非终端节点或分支节点:度不为0的节点;:若一个节点含有子节点,则这个节点称为其子节点的父节点;:一个节点含有的子树的根节点称为该节点的子节点;
2024-01-16 18:34:54
1675
1
原创 C语言的编译链接和预处理,宏等相关知识
首先我们的.c文件会经过我们的编译器生成一个后缀为.obj的目标文件,再会和我们存放在静态库中的库函数等一系列函数一同经过我们的链接器生成我们后缀为.exe的可执行程序(在windos系统下后缀是.exe)用一张图来表示就是:每一个.c文件都会。
2023-09-24 19:26:48
113
1
原创 用C语言实现通讯录和C语言中的动态内存开辟
我们利用结构体创建一个PePInfo用来记录一个人的基本信息有名字,年龄,性别,电话号码,住址我用的是define定义的常变量为方便后续要更改不会整体更改我们通讯录需要实现的有,增加联系人,修改,删除,查看单独的联系人,排序,查看所有联系人且我们选择和三子棋一样的布局方式,有菜单有选择利用switch 中的case语句来对应到每一个功能创建一个data数组来存放这里的人的信息data数组的类型我们声明为一个新的结构体变量叫做content,但是我们光有数据存储的地方是不够的,因为倘若我们不清楚这个
2023-09-11 17:00:24
249
5
原创 qsort和bb_qsort
bb_qostrt就是等下我们需要实现的函数主体,我们可以看见这里的参数类型基本和qsort的参数保持了一致,除开元素个数和单个元素的大小我们使用的是int而qsort使用的是unsigned int 即 size_t 但我是前面的一个测试函数使用的int所以在此我也是用的是int (有需要的伙伴可以将其修改),其余的参数我们可以看见和其qsort一样,我们需要完善的就是其内部逻辑。而其函数指针中的两个void * 的指针是指向两个需要将其交换位置的元素的地址用于进行排序.
2023-08-20 12:27:22
92
6
原创 指针的进阶
指针(地址的由来):32位机器拥有32根物理的地址线(电线),每一根电线都会释放电信号,我们将电信号转化为0,1(正负电)的数字用来存储,这样我们就得到了32位二进制数字组成的二进制序列,将不同的数据用不同的二进制序列存储起来就得到了其对应的位置,我们将这个位置称为地址.(64位机器同理)是因为数组在初始化时就会为其分配一定大小的空间,它们的地址并不相同所以它们只是存储了相同的内容.但是str3和str4是同时指向了hello中h的地址,为了节省空间所以它们的地址是一样的.
2023-08-19 13:08:56
83
1
原创 字符串的逆序和单词反序
声明一个数组利用gets(),或者fgets()两个函数去进行输入,其中gets由于不安全(容易发生数组越界访问导致数组被“撑爆”),fgets当你敲完一串字符回车的时候,这个回车也会被计入到数组中这个是非常需要注意,如果要利用fgets则需要特殊处理一下(因为我刚栽了跟头)利用move变量的不断移动来寻找每一个单词,再将start = move + 1 来重新指定单词的开头(当move指向了‘\0’时,则转变判断方法,不再让move往后移动跳过'\0')第二种方法:思路:优先将整个字符串倒序。
2023-05-25 12:10:47
169
1
原创 扫雷游戏 - 以及和三子棋之间的一些区别
所以我们就需要利用两个二维数组才可以遍历这两种情况,第一个数组是把所有的雷的信息换句话说就是作为设计游戏人员才能看到的面板,第二个就把自己幻想成为一个游戏用户来思考能看见什么界面,或者说游戏流程。我们第一个数组存放完所有的雷之后,我们需要让这个棋盘的信息与原来初始化为全‘*’的棋盘的信息进行互通,利用scanf输入的值保存在第一个数组中,但是展现的是第二个数组,当第一个数组里的内容为0自然是没踩到雷,1.首先这个和三子棋的封装概念是一样的,都需要利用到封装(在我上一篇文章三子棋中),看上去就更加美观一些。
2023-05-19 21:54:17
68
1
原创 三子棋(n子棋)代码的实现---C语言(代码在最后)
第一个文件就是逻辑运行文件该文件不属于各类函数实现(定义的文件),是自己头脑里过的第一遍逻辑,如我想实现三子棋---1.我需要菜单,2.我需要拥有棋盘,3.我需要可以落子,4.我需要判断胜负。第三个文件就是函数的定义文件,该文件只用于函数的定义,这个文件才属于对于函数功能的实现且要尽量达到高内聚低耦合(说白了就是函数功能尽量的单一,便于操作和使用)。至此之后就是我们的大体函数game()函数---此函数包括我们所有的游戏函数的调用---当前游戏函数肯定还没有声明和定义。
2023-05-13 15:55:42
103
6
原创 char类型的取值范围为什么是-128至127
看上去是在我们的范围中的,但其实我们将最高位往往视作符号位(1为负数,0为正数)这个是否将char视作有符号char或者是无符号char是由编译器来规定的。有符号char的取值是个类循环。这其实是因为char类型在内存中的存储大小是被限定了的,我们利用sizeof去测试一下。所以128是个特例它存不进到char的类型中,但也没有-0的说法,所以它是个特殊的值。我们在编译器上如果输出一个如图的代码,打印结果却告诉我们是-128,这是为什么呢?这是所有的二进制数的取值,128在二进制中为:10000000。
2023-04-06 15:10:59
1275
1
原创 为什么整形在内存中的存储是用二进制的补码
如果我们将a + b 利用它们的原码加起来我们会发现答案并不 = 0,所以就显示出了我们计算机在进行计算的时候并不是简单的利用原码相加(要不怎么说前面的科学家都是巨人,我们只是站在巨人的肩膀上呢),科学家们就整出了个补码的概念,我们利用补码相加的时候我们会发现答案是1后面32位 0 ,但是我们的计算机(32位)只有32个字节所以要进行舍去,舍去了最高位1为了保留精度。第三点:我们如何将补码转化为原码呢,原码转化成补码经过了取反+1,那我们是否是利用-1再取反呢,细心的人就会发现,当补码再次进行取反+1时。
2023-04-02 12:27:34
272
原创 进军测试开发人员
目前我想进入的是京东这家公司,虽然目标很远大有些理想化,但是我愿意去努力尝试一下,选择京东的原因是因为我在上面买过很多东西,他们的服务我感觉对比于其他的几家主流公司我觉得是好的,而且我很喜欢京东里的董事长刘强东,我觉得是位很厉害的人,所以我想进入到该公司,希望各位与我一起共勉。我打算在每周抽出16-22个小时的时间来开展我的编程学习,由于我是大一的学生,课总体来说不算多,所以我的时间只会在这个时间段往上走,只会越来越多,希望用博客来监督和累计我每天的学习。
2023-04-01 10:35:47
127
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人