自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 《数据结构:栈和队列》

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行插入和删除操作的一端称为栈顶,另一端称为栈底。概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)队列也可以由数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。:栈的插入操作叫做进栈/压栈/入栈/,入数据在栈顶。

2024-07-19 21:34:02 427

原创 《数据结构:C语言实现双链表》

带头链表中的头结点,实际为“哨兵位”,哨兵位结点补存储任何有效元素,只是站在这里“放哨的”虽然有这么多的链表的结构,但我们实际中最常用的还是两种结构:单链表和双向带头循环链表.

2024-07-19 16:10:30 329

原创 《数据结构:C语言实现单链表》

当我们想要保存⼀个整型数据时,实际是向操作系统申请了⼀块内存,这个内存不仅要保存整型数据,也需要保存下⼀个结点的地址(当下⼀个结点为空时保存的地址为空)。在有数据的情况下,要找到最后一个结点,最后一个结点存放的指针指向的地址为NULL,把这个节点的指针指向为新结点。在数据为5的结点前面插入新结点,要传三个值,第一个是首结点,第二个要在哪个结点之前插入结点,第三个插入的数据值。思路在开辟新结点,需要用首结点找到插入结点之前的结点,让之前结点指向新结点,新结点指向被插入的结点。

2024-07-13 14:37:39 919

原创 《数据结构:C语言实现顺序表》

创建完成就一步步实现1、在squence_list.h的文件,首先要创建顺序表所要用到的结构体自定义类型//sequence_list.h文件中//顺序表存放数据的类型//顺序表的类型创建//存放指定类型数据的指针//存放数据的有效个数int count;//属性表空间大小int size;}SL;//重命名一个简单的名字。

2024-07-11 19:33:46 659

原创 算法的复杂度

实际中我们计算时间复杂度时,计算的也不是程序的精确的执⾏次数,精确执⾏次数计算起来还是很⿇烦的(不同的⼀句程序代码,编译出的指令条数都是不⼀样的),计算出精确的执⾏次数意义也不⼤,因为我么计算时间复杂度只是想⽐较算法程序的增⻓量级,也就是当N不断变⼤时T(N)的差别,上⾯我们已经看到了当N不断变⼤时常数和低阶项对结果的影响很⼩,所以我们只需要计算程序能代表增⻓量级的⼤概执⾏次数,复杂度的表⽰通常使⽤⼤O的渐进表⽰法。空间复杂度也是⼀个数学表达式,是对⼀个算法在运⾏过程中因为算法的需要额外临时开辟的空间。

2024-07-10 20:08:26 1247

原创 《C语言》预处理

C语言设置了一些预定义符号,可以直接使用,在预处理期间进行处理的。__FILE__//进行编译的源文件__LINE__//文件当前的行号__DATE__//文件被编译的日期__TIME__//文件被编译的时间__STDC__//如果编译器遵循ANSI C,其值为1,否则未定义100逻辑规则是帮后面代码中出现MAX直接替换成100,这个操作步骤是在预处理阶段完成的,一般在用#define定义常量时的名称用大写书写。

2024-07-07 13:44:02 883

原创 《C语言》编译和链接

程序同时也可以使用静态(static)内存,存储于静态内存中的变量在程序的整个执行过程一直保留它们的值。链接会生成一个表记录函数名有没有被声明,变量名赋值等等,一个文件定义了一个函数,另一个文件中没有声明这个函数也可以使用的原因就是因为链接产生的效果。将源代码程序输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成一系列的记号(关键字、标记符、字面量、特殊字符等)。在使用编译器编写代码时,编写的代码是高级语言,机器无法直接识别和运行,在编译器内部会翻译成机器可执行的机器语言。

2024-06-25 17:29:45 956

原创 《C语言》文件操作

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。程序中的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输入输出操作各不相同,为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着的字符河。我们写的程序是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失,等再次运行程序,是看不到上次程序的数据的,如果要将数据进行持久化的保存,我们可以使用文件。

2024-06-16 23:06:07 1274

原创 《C语言》动态内存管理

所以如果我们对申请的内存空间的内容要求初始化,那么可以很方便的使用calloc函数来完成任务。C语言还提供了一个函数叫calloc,calloc函数也是用来开辟动态内存空间的。这个函数可以向内存申请一块连续可用的空间,并返回指向这块空间的指针。动态内存开辟的函数需要引入头文件<stdlib.h>这样的柔性数组相当于获得了十个整形空间。free函数用来释放动态开辟的内存。内存分为栈区、堆区和静态区。用来调整动态内存空间。

2024-06-16 03:46:15 1332 6

原创 《C语言》联合体和枚举

从中可以发现结构体的内存比联合体的内存大一些,在成员一样的情况下联合体会省许多空间。使用方式跟结构体一样,联合体也可以由多个不同类型的成员组成。缺点是:在联合体中改变一个成员的值,其他成员的值也会被改变。在使用时会感觉联合体跟结构体一样,那它们直接有什么区别呢。知道联合体省空间,但需要注意它虽然省空间,但也有缺点。创建一个结构体和一个联合体,它们的成员相同。联合体的成员会因为另一个成员的变化而变化。通过打印联合体成员中的地址可以发现。因此联合体的成员不能同时使用。可以发现成员的地址都是一样的。

2024-06-13 20:39:40 682 3

原创 C语言结构体

位段的声明和结构是类似的,有两个不同:1、位段的成员必须是 int、unsigned int 或signed int,在C99中位段成员的类型也可以选择其他类型。2、位段的成员名后边有⼀个冒号和⼀个数字。//占一个bit位int b : 2;int c : 4;位段可以节省空间。

2024-06-09 01:02:51 592 3

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

这时,浮点数指数E的真实值等于1-127(或者1-1023),有效数M不再加1,直接还原为0.xxxxxxx的小数,这样为了表示±0,以及接近于0的很小的数字。在存时会把M转换成大于等于1,小于2的小数,移动小数位所以称为浮点数,对应E的值改变,存储M时只存储小数点后的数。对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。对于64位的浮点数,最高的1位存储符号位S,接着11位存储指数E,剩下的52位存储有效数字M。在存储时有符号整数引入了原码,反码,补码的概念。

2024-06-06 23:53:53 1095 2

原创 C语言Kruskal算法求最小生成树

除去上一次找的边后,在找权值最小的边为2的有(V2,V3),(V4,V3),(V5,V6),(V9,V8),连接不产生回路的边。按顺序判断(V1,V3)边会产生回路排除,(V7,V8)可选边,当连接完(V7,V8)后判断(V9,V7)连接会造成回路排除。除去之前找过的边,后面再看权值最小的边为3的边有(V1,V3),(V7,V8),(V9,V7)顺序判断,( V6,V7)符合,连接完(V9,V6)判断连接(V9,V6)是回路不符合。排除找过的边后,找下一个权值最小的为4的边有(V6,V7),(V9,V6)

2024-06-04 23:24:56 1169 11

原创 C语言Prim算法和Prim-Alternat找最小生成树

Prim-Alternate算法是只找当前标记点和上一个标记点的邻边。v1,v4,v3,v2,v9,v8,v7,v6,v5所有点被标记。Prim-Alternate算法是Prim算法的优化。从中有两条权值为3的边,任选一条(v8,v7)从两条权值为4的边,任选一条(v7,v6)从中选择权值最小为2的边,(v4,v3)从中选择权值最小为2的边,(v3,v2)从中选择边(v1,v4),最小权值为1。从中选择权值最小1的边,(v2,v9)从中选择权值最小2的边,(v9,v8)选择最小权值为2的边(v6,v5)

2024-06-03 13:27:55 745

原创 C语言字符函数和字符串函数

• strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。• strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串。• strtok函数的第⼀个参数为 NULL ,函数将在同⼀个字符串中被保存的位置开始,查找下⼀个标。• 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标。◦ 第⼀个字符串⼤于第⼆个字符串,则返回⼤于0的数字。◦ 第⼀个字符串等于第⼆个字符串,则返回0。

2024-06-02 16:04:19 1358 1

原创 C语言深入理解指针(5)

siezeof是一个操作符,sizeof计算的是变量所占内存空间大小,单位是字节,操作数也可以是类型要用()括号扩起来,计算的是类型创建所占内存空间的大小。strlen函数计算的长度是从参数str这个地址开始向后,\0之前字符串中字符的个数。strlen函数会一直向后找\0字符,直到找到为止,所以可能存在越界查找。sizeof只关注占用内存的大小,不在乎内存中存放什么数据。strlen是C语言库函数,功能求字符串长度。strlen库函数使用时,需引入头文件<string.h>

2024-06-01 15:09:36 695

原创 C语言深入理解指针(4)

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方式直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对事件或条件进行响应。当使用加法时给Calc()函数里面传Add()函数的地址,Calc()通过地址调用Add()函数,此时Add()被称为回调韩式。qsort()是一个库函数,可以对任意类型的数组进行排序。qsort()函数的参数有四个,回调函数是通过函数调用的函数。1、待排序的数组的首元素指针。

2024-05-31 13:40:13 597 1

原创 C语言深入理解指针(3)

把函数用指针来存放,需要确定函数的类型,*p表示的是指针,指针指向的参数(int,int),返回类型int,就是把p去掉,就是函数的类型,Add函数的类型为int (*)(int,int),p是一个变量名可以任意取名。C语言中函数也有对应的地址,是地址就可以用指针变量来指向这个函数,得到地址就可以通过指针来调用函数。int(*p2)[5]是一个数组指针,这个指针变量p2的类型是int (*)[5]的指针。int * p1[5] 是一个指针数组,数组有五个元素,每个元素都是int*类型的指针。

2024-05-30 13:36:36 766

原创 C语言深入理解指针(2)

在函数调用中一维数组把实参传个形参时,形参可以写成数组的形式,也可以写成指针的形式,形参的改变会影响实参的本质是,形参拿到的是实参的地址,是一次传址调用。当指针获得数组的第一个元素的地址,通过指针的加减运算得以得到每个元素的值,这是应为数组在内存中是连续存放的。指针指向第一个元素的地址,可以通过指针来打印数组中的每个元素。指针变量存放变量的地址,用二级指针就可以存放指针变量的地址。**q,解引用*q,就等于解引用p,就等于*&a,等于a的值。指针数组本质上是数组,数组里面的元素是指针类型的。

2024-05-29 14:05:46 585

原创 C语言深入理解指针(1)

每个内存单元都有一个固定的地址,不需要保存,就像钢琴的每个键固定发出特定的声音,不需要在上面做标记,这是对一个懂钢琴的人来说的。内存是电脑上的一块存储区域,可读可写,速度较快,关机时就会清空,可以跟CPU直接进行运算,内存的每个内存单元为一个字节。创建了一个名为a的int类型的整形变量,把a的地址取出来赋值给p,此时p指针存放的就是a的地址。CPU通过地址地址来编址的,在64位机器中地址用八个字节表示,32位机用4个地址表示。const 在*星号的右边,const 修饰的是变量p,保证p的内容不变修改。

2024-05-27 17:15:24 724

原创 C语言操作符详解

其实10进制的每⼀位是权重的,10进制的数字从右向左是个位、⼗位、百位…,分别每⼀位的权重是10。表达式的整型运算要在CPU的相应运算器件内执⾏,CPU内整型运算器(ALU)的操作数的字节⻓度⼀。因此,即使两个char类型的相加,在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓。可能有这种字节相加指令)。2进制和10进制是类似的,只不过2进制的每⼀位的权重,从右向左是:2。注意:移位操作符的操作数为整数,移的是在内存中补码的二进制位。般就是int的字节⻓度,同时也是CPU的通⽤寄存器的⻓度。

2024-05-24 22:48:00 1176

原创 函数的递归与迭代

栈溢出是应为递归层次太深,不停使用内存分配的空间,递归没有结束,内存不归还,导致分配的内存空间被用完,就是栈溢出。当一个问题可以被拆分成多个相似的问题就可以考了递归,递归需要有结束条件,不然往往会产生无法结束的死递归。虽然递归的代码量小,但效率低,当递归的数字大时,运算量巨大,会有巨大的重复计算,执行效率低,占用内存大。递归会出现死递归,就是没有结束条件,不断的调用下去,在设置递归时每次递归尽量不断接近这个结束条件才行。出来死递归,还有可能产生栈溢出的现象。1、使用递归算出n的阶乘。

2024-05-24 13:27:28 179

原创 C语言易错题

但没这么简单因为suzeof()返回类型为unsigned int 无符号整形。全局变量int类型的和用静态static修饰的变量,如果没初始化默认为零。-1转换成无符号整形在内存中为补码值为2的32次方-1这个整形最大的值。sizeof()是也给操作符,返回一个变量或一个类型,占几个字节。-1 和 无符号整形比较计算会把-1转换成一个无符号整形。分析完毕 i = -1, sizeof(i) = 4;i应该小于sizeof(i)打印<\n才对。局部变量未初始化值默认值未知。最后结果是打印>\n。

2024-05-23 13:26:54 640

原创 C语言:扫雷游戏(用数组和函数的知识实现)

1、扫雷游戏在一篇区域中点击显示周围有几个雷。2、周为没有雷,自动扩大搜索范围。3、只剩雷时胜利,踩雷时失败。

2024-05-18 15:56:17 556

原创 C语言函数

库函数只是一小部分,最重要的是自定义函数,是自己创造的函数,所以的库函数的功能都可以通过自定义函数实现相同的功能。编写自定义函数才是一个人能力的体现。//自定义函数 int my(void) {int是函数的返回类型,也可以没有返回值就写voidmy是自定义函数起的名字()括号内是函数的参数,可以是多个,也可以没有,我写的就是没有void{}大括号能的是函数体,可以在里面编写代码,实现想实现的功能//函数的定义//返回结果int main()int a = 0;

2024-05-16 20:19:17 225

原创 第几天(蓝桥杯2018年第九届省赛c/C++B组第1题)

3、需要注意每个月的天数不一样,尤其是二月还要判断是否为闰年来确定天数。1、通过题目可知我需要编写一个可以算出一个日期是在该年的第几天。注意 : 需要提交的是一个整数, 不要填写任何多余内容。2、先通过月份来算出过来多少天,最后在加上日份就等于天数。那么, 2000年的5月4日, 是那一年的第几天?2000年的1月1日, 是那一年的第1天。3、计算完月,最后加上日份,算完后打印。2、用循环把过完月所经过的天数加起来。4、要过完这一月才加上这一月的天数。

2024-05-16 00:23:57 269

原创 C语言中的二维数组

我们想让二维数组中的每个元素都不是固定的就要用循环输入,要打印也需要循环打印。可以观察出二维数组在内存中存储的地址是连续的,在内存中是以十六进制存储的。需要注意每一次运行打印的地址都不一样,它都是临时调用内存地址的。要访问二维数组中的某一个元素就需要它对应的下标。

2024-05-15 17:47:30 166

原创 C语言数组的初始化

我想让二维数组中的每个元素为int类型,有3行5列,二维数组的名字可以自己起,只要不跟C语言中的关键字一样就行。当不想输入数组大小时又想要数组存放十个元素,那只能老老实实的初始化十个元素让数组知道我要存放十个元素。a这个二维数组可以存放12个int类型的元素,而我只给它存了7个值,这就叫不完全初始化。假设我想存放五个班的成绩每个班有五十个学生,成绩为小数,所以用float类型。可以不规定数组内元素的个数,数组在初始化时自行计算数组的元素个数。这是一维数组,它的每个元素为int类型。

2024-05-15 17:06:20 229

原创 C语言分支循环语句

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;case 整形1跟整形一样是运算时运算后面的语句,运算完后用break跳出。当所有case 后面的整形都不满足时运算befault后面的语句。exp1 为假, exp3 计算,计算的结果是整个表达式的结果。看表达式2为不为真,为真执行循环体,循环体结束执行表达3。当if的表达式为假时运算else里的语句。swhitch()括号内的表达式要为整形。case 整形1:语句;先执行表达式1,只执行一次表达式1。

2024-05-15 15:45:39 222 1

原创 星系炸弹(蓝桥杯2015年第六届省赛C/C++ B组第2题)

比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2015年1月16日爆炸。有一个贝塔炸弹,2014年11月9日放置,定时为1000天,请你计算它爆炸的准确日期。现在不清楚循环里面的循环体怎么去写,但可以确定的是我的打印日期是肯定有问题的,当月份和天数不满两位时要补0,当年分不满四位时需要补0.我知道了题目的要求需要算出正确答案只需要让炸弹定时的天数一天天过去直到为0时停止,想了下需要用循环来让天数为0停止运行然后打印日期。2月要考虑润年和平年,当是闰年是有29天,平年是有28天。

2024-05-14 23:10:38 977

原创 高斯日记(蓝桥杯2013年第四届省赛C / C++B组第1题)

他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如 : 4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人 : 日子又过去一天,还有多少时光可。提交答案的格式是 : yyyy - mm - dd, 例如 : 1980 - 03 - 21。在高斯发现的一个重要定理的日记上标注着 : 5343,注意 : 只提交这个日期,不要写其它附加内容,比如。高斯获得博士学位的那天日记上标着 : 8113。请你算出高斯获得博士学位的年月日。

2024-05-14 00:00:51 423

空空如也

空空如也

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

TA关注的人

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