自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构--单链表

那么N的值最后就会由1变为-1,这是说明快指针赶上并超过了慢指针,并没有重合,为了验证下一圈是否会重合,我们这样计算:在慢指针刚进入环时,慢指针走的路程为L,快指针为3L,等于L+C-N+kC(kC的意思是快指针走了k圈环后来到此位置),列出等式:3L=L+C-N+kC;N为奇数时,当快指针超过慢指针来到下一圈,此时距离为C-1;必不可少,由于快指针要比慢指针遍历的更快,我们可以假设当慢指针刚到环的第一个位置时,快指针与慢指针的差距为N,而环的总长度为C,链表的头节点到环的第一个结点的距离为L,

2024-09-27 11:19:50 1199 21

原创 预编译详解

预定义符号C语⾔设置了⼀些预定义符号,可以直接使⽤,预定义符号也是在预处理期间处理的。FILE//进⾏编译的源文件LINE//文件当前的行号DATE//文件被编译的日期TIME//文件被编译的时间STDC//如果编译器遵循ANSI C,其值为1,否则未定义列如: printf(“file:%s line:%d\n”,FILELINE基本语法:1000register//为 register这个关键字,创建⼀个简短的名字for;;//⽤更形象的符号来替换⼀种实现break;

2024-09-22 19:05:25 953 33

原创 编译和链接

我们在 test.c ⽂件中每⼀次使⽤ Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地址,但是由于每个⽂件是单独编译的,在编译器编译 test.c 的时候并不知道 Add 函数和 g_val变量的地址,所以暂时把调⽤ Add 的指令的目标地址和 g_val 的地址搁置。其中随着翻译的进行文件名的后缀也在发生改变,预处理后的文件名由.c变为.i,编译后由.i变为.s,经过汇编后将.s变为.obj.,再进行链接使其成为可执行程序,后缀为.exe。这些语法树是以表达式为节点的树。

2024-09-18 22:20:38 1056 21

原创 【函数栈帧】

在return z后就是对调用函数的函数栈帧的销毁了,首先将z的值传给寄存器eax,将edi,esi,ebx进行pop操作,意思为弹出,将他们弹出后,将esp的地址加上0CCh,弹出ebp与esp此时所指向的main函数的原ebp,使ebp回到main函数的栈底,最后进行ret 使原先存下来的地址发挥用途,重新来到main函数中,并进行剩下的操作。第一步中push的意思是压栈:将ebp的地址压在static int __cdecl invoke_main的栈顶指针上,即esp的地址加一,

2024-09-13 16:06:23 822 12

原创 【数据结构--顺序表】

线性表:线性表与顺序表互为父子级关系,可以说线性表是包含了顺序表等多个·具有相同特征的数据结构的集合,举例来说:线性表相当于水果,而顺序表就是其中的苹果。相同特征:既然顺序表,链表等数据结构都被成为线性表的一种,则说明他们具有相同的特征,从逻辑结构来看:之所以被称为线性表,是因为在我们看来其数据的组织结构像线性一样关联着,并且更加容易理解,所以被称为线性表。而物理结构方面是指数据的存储形式,但是并没有表现出线性的特征。所以我们将其成为线性表是因为其逻辑结构方面更加方便我们理解和归纳等。

2024-07-29 23:38:58 381 18

原创 算法复杂度

但算法本身对计算机也有着要求,在空间有限,时间有限的情况下,就应该对算法进行优化,使其降低对环境的要求,提高效率。空间复杂度与时间复杂度的表达方法一样,都使用O(N)来表示,在空间复杂度中N表示申请的空间数,如果申请的空间数为常数时,也为O(1),原因与时间复杂度一样,当申请的空间数为未知数也就是N时,为O(N),同样像嵌套循环申请空间时如果为N的高阶项,那么省略低阶项,只保留高阶项,如O(N^2)等。程序时间效率越高,时间复杂度就越低,因此应该考虑每条语句的运行时间和运行效率。

2024-07-25 22:37:21 658 8

原创 编译和链接(C语言)

预处理的作用是删除所有注释,标识,行号以此来方便调试,同时会将#define的定义直接替换,到此为止完成了编译的第一步,同时文件的后缀有.c改为了.i。链接的作用:在汇编的步骤时,会形成一个符号表,而符号表,每一个出现的函数都会有对应的地址,但是我们会经常利用多个源文件来实现不同功能的函数,所以在一个文件中的符号表上并不是所有的地址都是正确的,有些函数的声明并不在此文件中,所以链接使这些文件连在一起,并将符号表合在一起使各个函数的地址成为正确的地址,以此来保证程序的运行正常。

2024-06-16 20:54:40 247 6

原创 文件操作(C语言)

文件就是储存在硬盘(磁盘)中的文件,文件分为两种:程序文件和数据文件,二者有很大的区别:程序文件的作用是为了确保程序能够运行起来(通常以 .obj .exe .c 等等为后缀的文件)。数据文件则是储存我们运行的数据的文件。

2024-06-04 19:32:46 572 2

原创 自定义类型--结构体(C语言)

意思为在结构体中的这个名字为a的字符变量的内存空间中占用3个bit位(一个字节为8个bit位,可见对空间的利用率足够高),但是也有不确定因素,因为我们无法得知这3个bit位的数据是在一个字节中是从左向右排序还是从右向左排序,这要靠编译器本身进行抉择,同时一个字符的大小为一字节即8个bit位,存放时必将会缺失部分数据,于是我们将数据从低位到高位一次排放,直到排满要求的空间为止。“,BOOKs=”…二者的不同之处我们已经十分熟悉,区别就在于一个是无法改变原本的元素的大小,另一个是可以改变原有元素的大小。

2024-05-29 21:59:42 465 2

原创 数据在内存中的存储(C语言)

M为52个,E为11个,S仍为一个。大端是指在整型中的顺序原封不动的放在内存中,而小端则是顺序相反的存放。当一个整型存放在内存中时,由于字符的大小只有一字节大小也就是8个二进制位,所以在存储整型时会发生对整形的截断,将32位2进制截取到从右到左8个,同时也是2个16进制,但字符类型为有符号类型,因此在剩余的8个二进制中,首个数是用来判断正负数,1为负数,0表示整数所以字符中能存储的数的范围是-128到127,当超过了127或低于了-128时,就会重新进行计数变为-128和127,相当于一个循环。

2024-05-27 17:52:57 338 1

原创 字符函数与字符串函数(C语言)

该函数的作用是对一个字符串数组后再追加字符串,前提是必须要有’\0’(可以看出这些函数与’\0’的关系更像一种相辅相成的作用,是’\0’支撑着这些函数的逻辑,所以非常重要),另一个数组的首元素与该数组中最后的’\0’进行互换,随后将字符串全部加到该数组后面,直到空间不够为止。这是我用MY_strlen函数代替strlen函数的模拟实现,需要注意的是字符串中必须要有’\0’,因为strlen函数的就是根据’\0’来进行结束计算的,没有就会输出随机值。这是我对strcpy函数的模拟实现。

2024-05-25 17:26:44 579

原创 指针(C语言)

指针的类型也代表了指针存放地址的大小,比如当字符型指针存放一个整型的时候,字符型指针只能存放一字节的大小,而整型却有着4个字节的大小,因此字符型指针只能存放32个二进制中的8个,剩余的无法存放,当你想要访问剩余的24个二进制时,你可以通过地址+1来访问,但是在你未定义储存这些数据的指针时,就会出现野指针,野指针是非常的危险的指针,通常未对指针定义就使用时会造成非法访问,如何避免野指针?而qsort函数是对回调函数充分利用的函数,qsort函数的作用主要用来排序数组,无论是任何的类型都可以进行排序。

2024-05-21 14:25:58 282

原创 扫雷游戏(C语言)

mine棋盘作为布置雷和计算雷的个数的棋盘最重要的原因是因为初始化为'0'字符,在计算周围雷的个数时,只需让布置的雷代表字符’1‘,而无雷的地方为’0‘,计算时只需要将字符改为数字,数字之和就为雷的个数,节省了大量时间。如图print()为打印的函数。最后一步也是最关键的一步,大概思路是在mine棋盘上输入随机的坐标(1到9之间)然后判断坐标是否是雷,若是雷则游戏结束,若不是雷则计算周围雷的个数并将其打印在show棋盘的相应位置上,接着输入下一坐标,直到除了雷之外的所有格子被输入完后游戏结束并成功通关。

2024-04-22 21:49:20 924 1

原创 C语言中的分支和循环

,其中&&为逻辑与运算符,如:a&&b,意思为在符合a的条件下同时符合b的条件,可以更加准确的规定变量的范围,搭配if使用更加有效的缩短步骤,减少时间和精力。指循环中的循环,有两个循环;如while循环中嵌套了一个while循环,就用A来代表外循环,B代表内循环,当A循环执行到了B循环的时候,B会先进行循环直到不满足表达式时停止循环,接着A再开始执行第二次;形式为while(表达式){ },循环顾名思义,就是将大括号内的步骤反复循环,通常表达式为判断式,当大括号内的变量不再满足判断式,则会停止循环;

2024-04-16 20:42:28 402

原创 初识C语言

这些函数被组成了一个函数库,被称为标准库,这些函数也被称为库函数。关于字符和字符串的作用,我在知网上看到一个浅显易懂的回答:“为了让你提的这个问题我可以直接在浏览器中看到,而不是看到一串二进制或者是十六进制,然后自己去对着编码表去翻译'.在打印字符串时,在数组最后需要加 \0 作为结束符号。于1969年发明,起初是为了作为Unix系统的开发而发明,1988年C语言标准化,是C语言开始稳定和规范化,直至今日。main函数是程序的入口,在一个项目中,多个.c文件中只有一个main函数,入口只能有一个。

2024-03-31 18:30:42 243 2

空空如也

空空如也

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

TA关注的人

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