- 博客(41)
- 收藏
- 关注
原创 数据结构与算法-算法复杂度
数据结构是计算机存储、组织数据的方式,指下相互之间存在一种或者多种特定关系的数据元素的集合。没有一种单一的数据结构对所有用途都有用,所以我们需要学习各种各样的数据结构,例如:线性表、数、图、哈希等。
2025-05-22 17:32:37
864
1
原创 数据结构与算法-双向链表专题
由于带头双向循环链表的特性,prev和next都指向node本身,也就是自身循环。这里不使用二级指针传参是因为为了保证接口的统一性,因为之前的形参都是一级指针。如果你要在哨兵位前面头插,那相当于尾插(因为双向链表是带头双向循环链表)哨兵位也就是头节点,原先单链表中说的头节点其实是指第一个有效节点。如果phead=NULL,则只能说明这不是一个有效的双向链表。尾插主要是要直到双向链表尾插的结构和指针指向就很简单了。(下列的声明就不再显示,直接写函数的实现)如果双向链表为空,则只有头节点一个节点。
2025-05-14 22:00:00
555
原创 数据结构与算法-单链表的应用
运用三个指针,n1,n2,n3,n1是空指针,n2初始化为头节点地址,n3初始化为n2的下一个节点,然后将n2的next指向n1,n2再往后挪到下一个节点,也就是n3指向的节点,然后n3再等于n2的next指向的节点,以此类推就可以使得单链表反转,最后循环判断条件的n2是否为空指针。创建一个空链表,两个单链表节点进行比较,谁小谁就放进空链表中然后继续往后比较直到结束。1.遍历一边,用count++计数,然后进行半遍历找到中间节点,还要区分奇偶数的条件。这里实际使用了带头链表,创建的头节点可以称之为哨兵位。
2025-05-07 18:53:26
309
原创 数据结构与算法-顺序表应用
首先我们要理解的是通讯录本身就是以顺序表为底层的只不过顺序表中的数组,这里我们是用结构体来替代,用来存储用户的信息由于是通讯录的本质就是顺序表,所以顺序表的任何方法它都能套用这个是代码运行的源文件。
2025-04-22 19:57:40
383
原创 C语言-习题整理(1)
strlen函数是用来检测字符串长度的,运行的原理就是从开始到'\0'结束。由于arr是字符串数组,存放了三个数组,结尾没有添加'\0',所以strlen的返回值我们无法确定。
2025-04-15 19:56:35
745
原创 C语言-预处理详解
define 名字 内容#define SED "我很难过"100,\200)//其中的'/'是续行符,用上这个就可以继续在下一行使用在#define定义标识符的时候,需不需要加分号(;答案是不需要,加上;容易出现问题,因为定义后会把;一块定义进去,就会导致一些问题。从两者可以看出,分号的加入导致了if函数出现了问题#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏,或者叫定义宏。其中的parament-list是一个由逗号隔开的符号表,他们可能出现在stuff中。
2025-04-14 19:36:09
701
原创 C语言-文件操作
磁盘(硬盘)上的文件是文件程序文件、数据文件(功能角度划分)上图是顺序函数的介绍fgetc-读字符 fputc-写字符fgets-读字符串 fputs-写字符串fgetc、fgets、fputc、fputs、fscnaf、fprintf这些函数都是文本信息,而fread、fwrite都是二进制文件,也就是二进制信息。
2025-04-12 15:34:45
705
原创 C语言-自定义类型:联合和枚举
图中可得在定义中对wed的默认值进行了修改,改成了5,所以fri的值就从5开始依次加1变成了7,而tues还是从0开始加1,所以是1。
2025-03-17 19:05:19
726
原创 C语言(26)
结构是一些值的集合,这些值被称为成员变量。结构的每个成员可以是不同类型的变量。tips:数组也是一些值的集合,是相同类型的变量;结构则可以是不同类型结构体讲完就得讲结构体实现位段的能力位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int、unsigned int 或者signed int ,在C99中位段的成员类型也可以是其他类型。2.位段的成员名后边有一个冒号和一个数字例如:(看注释解析)struct S1int _a;int _b;int _c;int _d;
2025-03-16 19:01:25
718
原创 C语言(25)
整数在内存中以二进制的形式储存,分别为原码,补码,反码有符号的整数,在上述三种形式都有符号位和数值位两个部分,符号位为0是正数,1是负数,最高位的一位是符号位,剩余的都是数值位正整数的原码,补码,反码都一样负整数的原码补码和反码都各不相同直接将数值按照正负数的形式变成二进制就是原码符号位不变,数值位取反反码+1注意,整数存放数值的补码形式。
2025-03-14 18:15:49
933
原创 C语言(20)
sizeof:只关注空间的大小,不在乎内存的数据计算变量所占空间的大小,单位是字节,是操作符strlen:是库函数,求字符串的长度(找到\0为之)会关注内存的数据。
2025-02-18 11:25:36
348
原创 C语言(19)
一个通过函数指针调用的函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于响应如果你把函数的指针作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数是回调函数代码中的便是通过回调函数,运用函数指针来调用各个函数,被调用的被称为回调函数。
2025-02-16 17:37:35
393
原创 C语言(18)
/常量字符串这里的赋值是将字符串中首字符的地址赋给p//使用%s打印字符串时,只需要提供首字符的地址就行内容相同的常量字符串只需要保存一份就够//会放在只读数据区。
2025-02-15 11:41:29
388
原创 C语言(17)
但有例外:1.sizeof(数组名)//这里的数组名表示整个数组,计算的是整个数组的大小2.&数组名//这里也表示整个数组,取出整个数组的地址//整个数组的地址跟首元素地址相同。
2025-02-13 11:52:30
341
原创 C语言(14)
递归其实是一种解决问题的方法如果递归无限的递归下去,就会出现每一次函数调用都要为这次函数调用分配内存空间,空间是内存的栈区分配的,如果出现无限的递归调用函数,就会将栈区空间填满,这时就出现了栈溢出的现象图一图一中便是简单的函数递归,main函数自己调用自己,使得haha无限的循环下去,最终会导致栈溢出。
2025-02-09 13:49:04
306
原创 C语言(13)
语法形式:ret-type fun_name(形式参数)//返回类型 函数名 0到多个参数//(函数体)图一若返回类型没写,默认会为整型返回类型的void表示函数没有返回值参数部分的void表示函数不需要参数函数或者变量都要满足先声明后使用在函数的声明中,形参的名字可以省略函数的定义是一种特殊的声明。
2025-02-06 13:27:39
916
原创 C语言(10)
头文件与printf函数一样为用于读取用户的键盘输入scanf()读取用户输入时,会获取数据,遇到不合适的便会图一注释:此图所示,a需要输入的是整型,b需要输入的是浮点型,但输入的b的数值的整型,匹配失败,便会停止输入,所以b就并未赋予数值,b就为0。
2025-02-03 10:29:35
336
原创 C语言(9)
其中的I have %d friends就是输出的文本,而%d是占位符,它需要被其他的值代替,便是数字9,而这里的%d表示代替的值必须是整型。它的输出结果就会是两个空格加上111,因为输出的默认格式是右对齐,而%5d表示输出的这个占位符的宽度最小是5,而111自然是不满足5的宽度,所以就会在前面加上两个空格。顺带一提,printf函数的参数与占位符是一一对应的关系,如果有n个占位符,那么就会有n+1个参数,如果参数少于占位符的数量,那么缺少的占位符需要输出的参数就会在内存中随机输出。
2024-04-17 15:49:50
665
原创 C语言(8)
当然,复合赋值符不止这些,还有+= -= *= /= %= >>= <<= &= |= ^=。如果两侧的操作数都是整数,则其结果也是整数,如果这两个操作数有一个是浮点数,那么它的结果也会是浮点数。最后计算结果的值是a=11,b=11,而关于b的赋值是先让a加1(++与--便是自身加1或者是减1),然后再把加1后的a的值赋给b。,例如c = b = a + 3;最后计算的结果是a=11,b=10,关于b的赋值是先把a=10的值赋给b,然后再让a再加1.
2024-04-15 22:28:13
515
原创 C语言(6)
问题就出在这里,这个的类型由系统自己决定,所以就会有不确定性,于是C语言干脆就创造一个叫size_t的类型数据来储放sizeof的返回值,于是为了打印出来这个返回值,就需要这样:printf("%zd\n",sizeof(a)),用%zd来表示size_t的数据类型。布尔类型:这个类型也是在C99中引入的,原来的C语言是没有这个的,而此函数是专门来表示真假的,他的类型用 "_Bool" 来表示。每一个数据类型的长度表示着它们创造出不同长度的变量,使得它们的存储的数据范围也就各不相同。
2024-04-12 19:56:28
556
原创 C语言的收获(5)
循环执行语句的do while语句,while语句,for语句;注释便是在编写计算机语言的时候在编码旁给别人看的提示,计算机是不会识别注释的,注释是给人看的,让别人能更好的理解你写的代码,明白其中的含义,不至于让人思前想后,注释其实也在一定程度上反映了编程人的素质,下面便来聊聊如何进行注释。第二种方法:这个方法是人们普遍都会使用的一种方法,那便是用//的形式,在//后面的便是注释,但是这个只能针对//后面的一整行,换行了的话,对于下一行的注释它便不能包括其中,必须在下一行的注释开头也要加上//才行。
2024-04-11 22:15:59
240
原创 C语言的收获(4)
一般在书写多个疑问号的时候使用,因为在三字母的编译器上,"?)"便会被解析成"]","?("便会被解析成"[",所以以防外一会只用"\?转义字符就是一组具有特殊含义的字符,例如"\n"便是表示换行的意思,"\0"则是停止或者空白的意思,转义字符一般前面都会加个\。\f:一般用于换页,但是在现在的系统中体现不出来,一般可以用\v来进行代替。\\:用来表示一个普通的字符\,防止它被转译成转义字符的前缀。\v:光标移到下⼀个垂直制表位,通常是下⼀⾏的同⼀列。\":用来表示一个字符串内部的双引号。
2024-04-11 21:54:31
212
原创 C语言的收获(3)
而字符串中有一个特殊的不同,那便是"asdfg"中的字符其实并不只有asdfg这五个,在结尾处其实还存在\0这个字符,这个字符是转义字符,这个字符也具有特殊的含义,而这里的\0字符表示的就是空白没有内容,或者就是结束的意思。所以"asdfg"中其实是有六个字符,最后面的\0不显示,但是却代表着函数printf打印信息的终点,并不是说没有任何意义。C语言也存在一些字符,比如"a" "#" "q"......这种便叫做字符,而计算机通常是识别二进制的信息,所以人们会用二进制的序列来编辑这些字符,这便叫做编码。
2024-04-04 19:38:39
285
原创 C语言的收获(2)
main函数可以说是C语言程序的入口,不管C语言写了什么代码,一切都会先从main函数这边开始,所以说main函数在C语言中是必备的函数,故main函数还被称之为主函数。既然main函数是作为C语言程序的入口存在,那么这个入口肯定只能有一个,不可以有第二个,要不然计算机就不知道该进入哪个入口从而发生了问题,这便是main函数的一个特点:一个C语言程序中只能有一个main函数,而且不管.c的文件有多少个,main函数也只能有一个。printf函数实际上是实现了信息在屏幕上的打印,是一个库函数。
2024-04-03 21:09:25
189
原创 初步学习c语言后我的收获(1)
c语言本身其实是一种编译型计算机语言,其本身的源代码是后缀为.c的文本,无法做到直接运行,所以它还需要经过编译和链接两个方式来转换成二进制的可执行文件,最后才能被计算机识别然后运行。而关于编译器与链接器,我则是去找了一个叫做VS2022的集成开发环境,这种集成开发环境本身就具有编译和链接的功能,而且不止这些功能,对于我这种新手来说,VS2022可能算是一个不错的选择,虽然内存比较大,但是他的功能很全面,安装也很方便,不需要创建什么环境,而且VS2022的社区版还是免费的,我个人也推荐这个。
2024-03-31 14:52:25
276
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅