自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单链表(c语言简单实现)

2. 插入和删除操作高效:在特定位置进行插入和删除操作时,只需修改指针,时间复杂度为 O(1)(在头部或尾部插入/删除)或 O(n)(在特定位置插入/删除,n 为链表长度)。- 特定位置插入:先找到目标位置的前一个节点,然后进行插入操作个节点,然后进行插入操作。- 头部插入:操作简单,只需将新节点的指针指向原链表的头节点,然后更新链表头指针。- 首先找到要删除节点的前一个节点,然后将其指针指向要删除节点的下一个节点。1. 插入节点:可以在链表的头部、尾部或特定位置插入新节点。单链表是一种常见的数据结构。

2024-09-20 20:56:58 302

原创 顺序表(c语言实现)

3. 插入和删除操作可能比较耗时:在中间位置插入或删除元素时,需要移动大量后续元素以保持连续性。1. 随机访问:可以在常数时间内访问特定位置的元素,例如,通过下标可以快速找到对应元素。通常使用数组来实现顺序表。2. 当数据规模相对稳定,且不需要频繁进行插入和删除操作时,顺序表是一种高效的选择。2. 存储密度高:不需要额外的指针来链接元素,所有空间都用于存储数据本身。顺序表是一种数据结构,它在计算机内存中以连续的存储位置来存储数据元素。1. 适合频繁进行随机访问的情况,如查找特定位置的元素。

2024-09-16 23:22:29 234

原创 算法的时间复杂度和空间复杂度

对数时间复杂度 O(log n):算法执行的时间与输入数据的大小呈对数关系。例如,二分查找算法。- 线性时间复杂度 O(n):算法执行的时间与输入数据的大小呈线性关系。例如,遍历一个数组。- 线性对数时间复杂度 O(n log n):常见于一些高效的排序算法,如快速排序和归并排序。- 平方时间复杂度 O(n²):算法执行的时间与输入数据的大小的平方呈正比关系。例如,冒泡排序算法。- 立方时间复杂度 O(n³)及更高:算法执行的时间与输入数据的大小的立方或更高次方呈正比关系。

2024-09-09 07:22:53 396

原创 数据结构的简单认识

在设计算法时,需要考虑算法的时间复杂度和空间复杂度,以确保算法的效率和可行性。不同的数据结构具有不同的特性和操作方式,为算法提供了不同的存储和组织数据的方式。例如,在排序算法中,如果对大量数据进行排序,选择合适的数据结构(如数组或链表)以及相应的排序算法(如快速排序、归并排序等)可以大大提高排序的效率。例如,在图的最短路径问题中,需要使用图这种数据结构来表示问题中的节点和边的关系,然后采用合适的算法(如 Dijkstra 算法或 Floyd 算法)来求解最短路径。反过来,算法的需求也推动了数据结构的发展。

2024-09-04 15:17:01 631

原创 c语言中文件操作和相关函数

在计算机领域,文件是存储在某种存储介质(如硬盘、闪存等)上的具有名称的一组相关数据的集合。一、文件的组成部分1. 数据内容- 文件包含实际的信息,可以是文本、图像、音频、视频、程序代码等各种形式的数据。- 例如,一个文本文件可能包含一篇文章、一份报告或一段程序代码;一个图像文件则包含像素数据,用于表示图像的颜色和形状。2. 文件名- 用于唯一标识一个文件。文件名通常由字母、数字、下划线和其他特殊字符组成,但不能包含某些特殊字符(如斜杠、反斜杠、冒号等)。

2024-09-03 22:46:42 1126

原创 c语言中的动态内存管理

功能: calloc 函数用于在内存的动态存储区中分配 n 个长度为 size 字节的连续区域,并将分配的内存初始化为 0。它接受一个参数 ptr ,这是一个指向要释放的内存块的指针。1. 确保只释放已分配的内存:传递给 free 的指针必须是由动态内存分配函数返回的有效指针,否则可能会导致未定义的行为。- 表现:申请了动态内存但没有在合适的时候释放,导致内存资源一直被占用,随着程序的运行,可能会耗尽系统。表现:指针指向的内存被释放后,指针没有被置为 NULL 或重新赋值,继续使用该指针会导致未定义行为。

2024-09-02 11:02:17 840

原创 c语言中自定义类型

在这个联合体中,如果 int 通常占用 4 个字节, float 通常占用 4个字节,而 char 占用 1 个字节,那么这个联合体的大小将是 4 个字节,因为 float/int 是其中最大的成员类型。4. 如果嵌套了结构体,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。在 C 语言中,联合体(union)是一种特殊的数据类型,它允许在同一内存空间存储不同的数据类型,但在同一时刻只能存储其中一种类型的值。

2024-09-01 22:10:19 1061

原创 结构体内存对齐(sizeof(结构体)大小的求解)

c2 是 1 字节,可放在 i 后面的任意地址,但为了满足结构体总大小是最大对齐数(4)的整数倍这一规则,结构体 s1 的总大小需要是 4 的整数倍,4+4+1=9,找到最小的4的倍数,所以 c2 后面会填充 3个字节的空白,使得结构体 s1 的大小为 12 字节。这表明了,一个结构体的里面的类型相同,不同顺序的排列,也会使开辟的空间大小不同。4. 如果嵌套了结构体,嵌套的结构体成员对齐到自己的成员中最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍。

2024-07-17 23:51:18 442

原创 模拟strstr库函数

"中的起始位置是 7。在 C 语言中, strstr 函数用于在一个字符串中查找另一个字符串首次出现的位置。5. 如果在比较过程中出现不匹配的字符,就将主字符串的指针向后移动一位,重新开始比较。1. 首先,定义一个函数,接受两个字符串指针作为参数,分别表示主字符串和子字符串。4. 如果当前字符匹配,就继续比较后续的字符,直到子字符串的所有字符都匹配成功。3. 从主字符串的开头开始,每次将主字符串的当前位置与子字符串的开头进行比较。6. 如果子字符串的所有字符都匹配成功,返回主字符串中匹配开始的位置指针。

2024-07-13 23:56:25 450

原创 模拟strcmp库函数

如果 str1 小于 str2 , strcmp 函数返回一个负数;如果 str1 大于 str2 , strcmp 函数返回一个正数;它的作用是比较两个字符串的大小。其函数原型为 int strcmp(const char *str1, const char *str2)。比较的规则是按字典顺序对两个字符串自左至右逐个字符进行比较(按照 ASCII 码值大小),直到出现不同的字符或遇到 '\0' 为止。strcmp 是 C 语言标准库中的一个字符串比较函数。

2024-07-13 00:24:52 119

原创 strlen函数的相关计算

而 strlen(*arr) 、 strlen(arr[1]) 、 strlen(&arr) 、 strlen(&arr + 1) 等用法是不正确的,可能会导致未定义的行为或错误的结果。strlen 的功能是计算一个指定字符串的长度,函数原型为 size_t strlen(const char *s) ,它会从字符串的首地址开始向后遍历,直到遇到第一个空字符 '\0' 停止,并返回遇到 '\0' 之前的字符个数。strlen 函数返回的是字符串的长度,其单位是字符个数。

2024-07-10 23:48:09 448

原创 sizeof的计算

a + 0 的类型是指向整数的指针,指针大小通常为 4 字节(32 位系统)或 8 字节(64 位系统)(这里a不是单独在sizeof里面,加了一个0,所以这里的a可不能看成整个a的大小,要看成首元素的地址,地址加0,还是地址)// 输出 16,因为数组 a 的大小为 4 个整数,每个整数 4 字节,共 16 字节,补充一点,数组名是首元素地址,但是和sizeof搭配使用时,数组名代表整个数组(单独搭配哈),所以求出也是整个数组的大小,这个点不懂得,可以看我的文章中,名叫数组名的理解的文章。

2024-07-10 00:07:52 369

原创 C语言中的库函数qsort(回调函数的范例)

在上述示例中, intCompare 函数定义了整数的比较规则, qsort 函数根据这个规则对数组进行排序。- compar :指向比较函数的指针,用于确定排序的顺序。在 C 语言中, qsort 函数用于对数组进行快速排序。// 根据比较规则返回负数、0 或正数。- base :要排序的数组的起始地址。// 负数表示 a 排在 b 之前。// 正数表示 a 排在 b 之后。// 0 表示 a 和 b 相等。- nmemb :数组中的元素数量。// 比较函数,用于按升序排列整数。

2024-07-08 00:22:01 183

原创 函数指针和回调函数

将一个函数的指针作为参数传递给另一个函数,当特定的事件或条件发生时,接收这个指针的函数就可以通过指针调用被传递进来的函数,这个被传递进来的函数就是回调函数。函数指针在很多场景中非常有用,比如实现回调函数、动态选择要执行的函数等,能够增加程序的灵活性和可扩展性。简单来说,回调函数就是由你自己定义,但不是由你来调用,而是由系统在特定条件下自动调用的函数。使用函数指针时,需要先将其指向一个具体的函数,然后通过指针来调用函数。在 C 语言中,函数指针是一种特殊类型的指针,它指向一个函数。那接下来说一下回调函数。

2024-07-07 23:56:08 193

原创 指针数组和数组指针

对它取地址,取的是整个数组的地址(这个地方不懂可以看看我前面说的数组名的理解的那个地方),那取出来的地址,存放指针变量中,该怎么表示呢,我们知道arr的类型是int [10],你会不会就想直接int [10] *,按理解确实该这样,但是,不是呢,规定应该是int(*变量名)[10]。再介绍这个之前,我们回顾一下指针,指针是一个变量(一个存放地址的变量,比如存放一个int的变量,指针类型就是int *),所以就有整型指针,字符指针等等,同理数组指针就是存放数组的地址的变量。数组是同一个类型的数的集合。

2024-06-22 02:56:36 223

原创 整型和浮点数在内存中的存储

对于 11 位的 E,这个中间数是 1023。根据乘2取整法,将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。因为这里是正的1,(正数原码,反码,补码相同),(负数原码,反码=原码符号位不变,数值位(其他位)按位取反,补码=反码+1)- 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。- 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M。

2024-06-05 20:08:34 837

原创 冒泡排序算法(升序为例)

从数组的开头开始,依次比较相邻的两个元素,如果前一个元素大于后一个元素,就将它们交换位置。这样一趟比较下来,最大的元素就会出现在数组的末尾。然后对除了已排好的最大元素之外的其他元素继续进行这样的操作,经过多轮比较交换,最终使整个数组按从小到大(或从大到小)的顺序排列。每一轮比较后,参与比较的元素范围会逐渐缩小。虽然算法简单直观,但效率相对不是特别高。如果这个代码本来就是升序的,那flag就不会被改变,直接跳出循环,所以节约时间,提高效率。例如上述代码,就要执行很多次,所以优化了一下。

2024-06-03 22:38:45 249

原创 在 C 语言中,“static”主要修饰的两种情况:

我们都知道,在一个函数中的局部变量,调用时创建,出来就销毁了。如上图中test函数中的a,如果没有加上关键字 static,调用完就销毁a,那就是每次调用都是新创建,所以下面代码就会打印10个6。但是,加上static,a就不会被销毁,打印结果为 6 7 8 9 10 11 12 13 14 15。- 静态局部变量:在函数内定义,它的值在整个程序运行期间都保持存在,并且只在该函数内可见。- 静态全局变量:限制该变量只能在定义它的源文件内使用,其他源文件不能直接访问。

2024-06-03 09:51:49 275

原创 写一个函数返回二进制中1的个数

版本一里讲的内容就是我觉得的奇妙解法t&(t-1)可以达到一个使二进制最右的1消失,原理就是当t=11111100时,t-1就会把最右边的1借走,变为(11111011),然后按位&,最右边的1就消失了,所以截止条件就是当这个二进制一直与它-1的二进制按位与时,赋值结果为0停下。比如二进制数 1010,从右往左依次为 0 乘以 2 的 0 次方、1 乘以 2 的 1 次方、0 乘以 2 的 2 次方、1 乘以 2 的 3 次方。所以我们第一想到的就是移位(左移和右移)➕按位与&(有0为0,全1为1),

2024-06-01 10:10:41 139

原创 整型提升(表达式求值)

00000101➕01111111,得到10000100,打印的时候,char c3要按照%d(有符号整型类型打印),就要用上整型提升(从8个比特位变为32个比特位的01序列),其他位不变,符号位补全,转换为1111111111111111111111111110000100(补码),正数的原码反码补码都相同,负数的反码由原码按符号位不变,其他数值位按位取反( 0变1,1变0),补码由反码➕1。这里介绍两个概念,以防初识得宝子们,看不懂我在说啥,比如1+1,+就是操作符,它左右的两个1就是它的操作数。

2024-05-31 15:54:32 348

原创 数组名的含义

我们知道按照原来的讲法,数组名是首元素,arr就是一个地址,地址的大小是看在不同地址线的,只有4或者8两种结果,如果是首元素便不成立,所以这里的数组名表示整个数组,计算的也是整个数组的大小。今天分享一下数组名的含义,在学习c语言时,我们总是会听到老师说,数组名是首元素地址,但是,有一些特殊情况下,它并不是这样的。第六个打印➕1,跳过整个数组(40个字节)。所以,&取地址,取出来的整个数组的地址。第三个打印,arr[0],也是首地址。第一个打印,是arr是数组名首地址。第五个打印&arr,也是首地址。

2024-05-31 15:08:57 252

原创 2023年5月31日-getchar

但是你会发现当你输入A时,输出的是a*,接下来告诉你们为什么会这样,当我们写一个字符进去时,都会敲一个回车让它跑起来,而getchar获取字符时,它不是直接从键盘获取的,而是在一个输入缓冲区的地方拿字符,我们敲A进去的同时,也敲了\ n,回车就是\ n,当我们的代码执行时,第一次getchar拿掉了A ,然后缓冲区中还有\ n,然后现在循环再上去,缓冲区里还有\ n,\ n的ASCII码加32就是*的ASCII码,所以为了解决这个问题我们应该。由于ASCII码里大写字母转换为小写字符,是大写的值加32,

2023-05-31 19:44:18 52

原创 2023年5月23-扫雷

今天分享一下扫雷,我的想法是用两个数组来处理,但是你也可以用一个数组,但是雷和非雷位置,和统计出来的信息就要放在一个数组中,比较冗余,所以我这里采用两个数组,并且两个数组一样大。改进的地方就是点到一个非雷的位置,周围8个坐标也没有雷,它会展开一片,然后再以周围的八个坐标再展开,直到周围八个坐标存在雷,但是我展开,你是我的周围坐标,你展开,我是你周围坐标,这样就会存在死递归问题,所以记得标记已经排查过的坐标。如果想要代码可以打开这个链接https://gitee.com/tgxqqcom/

2023-05-24 00:04:12 60

原创 c语言-三字棋

今天分享一下我写三字棋比较好的地方,我判断输赢的哪里,返回的值就是下的最后一个棋,这样就不用特别麻烦,还有棋盘的行和列,用的是宏定义,如果后期想把棋盘改一大一些,都不用改太多的地方。需要改进的地方就是判断输赢的判断行列,对角线那个地方,最好可以由前面的宏定义行列控制,我的直接用的固定值,想改进的可以试试,还有电脑也可以搞得智能化一些比如堵一下。

2023-05-21 18:56:32 70 1

原创 初识递归思想及递归函数

以上两条限制条件,都是因为我们的栈空间是有限的,我们每次调用函数,形参都会开辟空间,递归函数又是要拿到最里面的结果在返回次内层的函数,导致无限下去,栈就会因为放不下,出现栈溢出。我们知道最大的一位数是9,所以当等于9的时候,我们就可以不继续调用递归了,所以这里就把9作为限制条件。这里我就写一下递归函数,主函数的调用,你们就自己来吧。今天来分享一下递归函数吧,递归函数就是自己调用自己的函数,但是它要能正常使用,它便有两个限制条件。1,存在极限条件,当满足这个极限条件,递归便不再继续。

2023-05-13 00:56:37 46

原创 switch语句

/这里switch后面的整型表达式3。会跳到case3:这里开始执行,由于我这里没有break;所以想实现真正的分支,就要加上break语句,然后这里为了格式好看,我们一般把default放最后,但是你也可以这样。//这种情况就是上面都不满足,所以要执行的。今天给大家分享一下,switch语句,它的基本格式是这样的。愿我的分享对你有点用,而别人的分享对我有点用。case 整形表达式的结果:,后跟语句,case 整形表达式的结果:,后跟语句,case 整形表达式的结果:,后跟语句,

2023-04-30 08:23:15 42

原创 分支语句(单分支和双分支)

表达式为真,执行语句1,表达式为假, 执行语句2,切记else后面不需要再跟反 表达式的。第三种就是当满足表达式1,就执行语句1,若表达式1不满足,就试试表达式2,那个表达式为真,就执行它后面的语句。表达式为真,执行语句,表达式为假,不执行。希望我分享的分支语句,大家可以用的上。else if (表达式2)else if(表达式3)今天来介绍一下分支语句,2,if(表达式1)3,if(表达式1)

2023-04-13 19:56:28 142

原创 逗号表达式

有这样一个表达式d=( a= b+3,b=c+a, c=5-b),它就是一个逗号表达式,逗号表达式是从左往右计算的,比如这里a= b+3,由于b=4,所以a=7,那求b= c+a时,a 用的值便是7,在之前,我一直以为用初始值,所以学习永远都需要谦虚,b=5+7=12,那c=5-12=-7,所以整个表达式的值是-7,d=-7,这时候你打印a,b, c的值时,它也是随之变化的,a=7,b=12,c=-7,希望这篇文章可以对你们学习逗号表达式有用。

2023-04-08 18:24:56 78

原创 条件运算符

当a=3, b=4时,( a>b)?1:3,此时这个表达式结果就是3,在这种比较两个数大小时,是不是这种表达方式就比if …else语句代码来的简短精练些,但是具体问题,具体分析。当exp1是真时(条件成立),则整个表达式的结果为exp2。当exp1是假时(条件不成立)则整个表达式的结果为exp3。它的格式为exp1?exp2:exp2,我今天学习了c语言中的条件运算符,

2023-04-07 23:35:44 35

原创 简单认识c语言的概念

今天初识了c语言,知道c语言是一门计算机语言,和它一样属于计算机语言的还有java, c++等等,c语言提供了许多低级处理功能,还有很好的跨平台性,二十世纪八十年代,美国国家标准局为c语言制定一套标准语法,称为ANSIC,目前c11是第三个官方标准,也是c语言的最新标准,c语言是面向过程的语言。数据类型有char, short,int, long,long long,float, double及其大小。由于生活有许多事物是变化的,有一些是不变的,所有有了变量和常量。而编译器主要有Glang, MSVC。

2023-03-30 18:07:13 57

空空如也

空空如也

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

TA关注的人

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