自定义博客皮肤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)
  • 收藏
  • 关注

原创 【数据结构】双向链表

实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。带头链表里的头节点,实际为“哨兵位”,哨兵位节点不存储任何有效元素,只是站在这里“放哨的”。这里的“带头”跟前面我们说的“头节点”是两个概念,实际前面的在单链表阶段称呼不严。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等。2.带头双向循环链表:结构最复杂,一般用在单独存储数据。谨,但是为了更好的理解就直接称为单链表的头节点。

2024-09-10 15:48:55 327

原创 【数据结构】算法的时间复杂度和空间复杂度

一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。基本操作执行最好1次,最坏O(logN)次,时间复杂度为 O(logN) ps:logN在算法分析中表示是底数为2,对数为N。基本操作执行最好N次,最坏执行了(N*(N+1)/2次,通过推导大O阶方法+时间复杂度一般看最坏,时间复杂度为 O(N^2)基本操作执行最好1次,最坏N次,时间复杂度一般看最坏,时间复杂度为 O(N)基本操作执行了2N+10次,通过推导大O阶方法知道,时间复杂度为 O(N)

2024-09-09 14:30:59 806

原创 【数据结构】基本概念和术语

是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于它的一组逻辑特性,而与其在计算机内部如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部的使用。抽象数据类型和数据类型实质上是一个概念。“抽象”的意义在于数据类型的数学抽象特性。抽象数据类型的定义由一个值域和定义在该值域上的一组操作组成。若按其值的不同特性,可细分为下列三种类型:原子类型 (atomic data type)属原子类型的变量的值是不可分解的。

2024-09-09 13:54:08 917

原创 【数据结构】单链表专题

图中指针变量 plist保存的是第一个节点的地址,我们称plist此时“指向”第一个节点,如果我们希望plist“指向”第二个节点时,只需要修改plist保存的内容为0x0012FFA0。想象一下这样的场景,假设每节车厢的车门都是锁上的状态,需要不同的钥匙才能解锁,每次只能携带一把钥匙的情况下如何从车头走到车尾?链表中每个节点都是独立申请的(即需要插⼊数据时才去申请一块节点的空间),我们需要通过指针变量来保存下一个节点位置才能从当前节点找到下一个节点。与顺序表不同的是,链表里的每节"车厢"都是。

2024-09-08 12:22:09 456

原创 【数据结构】顺序表的应用

2)能够保存用户信息:名字、性别、年龄、电话、地址等。1)至少能够存储100个⼈的通讯信息。

2024-09-07 11:53:46 494

原创 【数据结构】顺序表

数据结构是由“数据”和“结构”两词组合而来。什么是数据?常见的数值1、2、3、4…、教务系统里保存的用户信息(姓名、性别、年龄、学历等等)、网页里肉眼可以看到的信息(文字、图片、视频等等),这些都是数据。什么是结构?当我们想要大量使用同一类型的数据时,通过手动定义大量的独立的变量对于程序来说,可读性非常差,我们可以借助数组这样的数据结构将大量的数据组织在一起,结构也可以理解为组织数据的方式。想要找到草原上名叫“咩咩”的羊很难,但是从羊里找到1号羊就很简单,羊圈这样的结构有效将羊群组织起来。

2024-09-05 20:17:22 541

原创 【C语言】编译和链接

我们在 test.c 文件中每一次使用 Add 函数和 g_val 的时候必须确切的知道 Add 和 g_val 的地址,但是由于每个文件是单独编译的,在编译器编译 test.c 的时候并不知道 Add 函数和 g_val变量的地址,所以暂时把调用Add 的指令的目标地址和 g_val 的地址搁置。将源代码程序被输入扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成一系列的记号(关键字、标识符、字面量、特殊字符等)。链接是一个复杂的过程,链接的时候需要把一堆文件链接在一起才生成可执行程序。

2024-09-03 13:54:35 1098

原创 【C语言】文件操作

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。函数名功能(适用于)fgetc字符输入函数 ( 所有输入流)fputc字符输出函数( 所有输出流)fgets文本行输入函数(所有输入流)fputs文本行输出函数 ( 所有输出流)fscanf格式化输入函数 (所有输入流)fprintf格式化输出函数 ( 所有输出流)fread二进制输入 (文件)fwrite二进制输出 (文件)fgetc用于读取文件内的单个字符。

2024-09-01 13:27:39 1581

原创 【C语言】动态内存管理

• 数组在申明的时候,必须指定数组的长度,数组空间一旦确定了大小不能调整,但是对于空间的需求,不仅仅是上述的情况。• 有时会我们发现过去申请的空间太小了,有时候我们又会觉得申请的空间过大了,那为了合理的使用内存,我们一定会对内存的大小做灵活的调整。当是情况2 的时候,原有空间之后没有足够多的空间时,扩展的方法是:在堆空间上另找⼀个合适大小的连续空间来使用。• 包含柔性数组成员的结构用malloc ()函数进行内存的动态分配,并且分配的内存应该大于结构的大小,以适应柔性数组的预期大小。

2024-08-29 12:03:33 1175

原创 【C语言】函数(二)

一般我们在使用函数的时候,直接将函数写出来就使用了。比如:我们要写一个函数判断一年是否是闰年。//判断⼀年是不是闰年return 1;if(r == 1)printf("闰年\n");elseprintf("⾮闰年\n");return 0;这种场景下是函数的定义在函数调用之前,没什么问题。if(r == 1)printf("闰年\n");else。

2024-08-28 10:14:56 840

原创 【C语言】函数(一)

了解了库函数,我们的关注度应该聚焦在自定义函数上,自定义函数其实更加重要,也能给程序员写代码更多的创造性。

2024-08-27 08:02:20 1124

原创 【C语言】数组

前面学习的数组被称为一维数组,数组的元素都是内置类型的,如果我们把一维数组做为数组的元素,这时候就是二维数组,二维数组作为数组元素的数组被称为三维数组,二维数组以上的数组统称为多维数组。有一个比较迷惑的点,变长数组的意思是数组的大小是可以使用变量来指定的,在程序运行的时候,根据变量的大小来指定数组的元素个数,而不是说数组的大小是可变的。从输出的结果来看,每一行内部的每个元素都是相邻的,地址之间相差4个字节,跨行位置处的两个元素(如:arr[0][4]和arr[1][0])之间也是差4个字节,所以。

2024-08-26 11:42:41 967

原创 【C语言】循环

C语言是结构化的程序设计语言,这里的结构指的是顺序结构、选择结构、循环结构,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。

2024-08-25 11:05:27 1162

原创 【C语言】分支

C语言是结构化的程序设计语言,这里的结构指的是,C语言是能够实现这三种结构的,其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。我们可以使用 if 、 switch 实现分支结构,使用 for 、 while 、 do while 实现循环结构。

2024-08-21 09:01:31 765

原创 【C语言】数据类型和变量

数据类型介绍C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。下面盘点一下C语言提供的各种数据类型,本章节主要探讨内置数据类型。printf() 的作用是将参数、文本输出到屏幕。它名字里面的 f 代表 format (格式化),表示可以定制输出文本的格式。return 0;

2024-08-20 12:20:59 1215

原创 【C语言】常见概念

C语言常见概念

2024-08-19 07:49:29 820

原创 自定义类型:联合和枚举

上述的结构其实设计的很简单,用起来也方便,但是结构的设计中包含了所有礼品的各种属性,这样使得结构体的大小就会偏大,比较浪费内存。联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。在C语言中是可以的,但是在C++是不行的,C++的类型检查比较严格。代码1输出的三个地址一模一样,代码2的输出,我们发现将i的第4个字节的内容修改为55了。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值。

2024-08-19 06:01:32 806

原创 自定义类型:结构体

详细介绍C语言结构体类型

2024-08-18 12:56:30 824

原创 数据在内存中的存储

详细介绍数据在内存存储的基本原理(涵盖整形,浮点型,以及大小端判断法)

2024-08-17 06:41:16 705

原创 【C语言】内存函数

详细介绍C语言四大常用函数的功能,使用,以及部分模拟实现

2024-08-17 05:35:17 713

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

详细介绍字符和字符串的相关实用函数以及相关模拟实现

2024-08-16 08:17:44 969

原创 【C语言】sizeof 和 strlen

sizeof(数组名),这里的数组名表⽰整个数组,计算的是整个数组的大小。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。除此之外所有的数组名都表示首元素的地址。

2024-08-15 09:26:40 331

原创 回调函数(附带qsort函数的模拟实现)

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,被调用的函数就是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。使用回调函数,模拟实现qsort(采用冒泡排序)。回调函数就是一个通过函数指针调用的函数。

2024-08-15 08:39:39 292

原创 指针(四)

详细介绍字符指针变量,数组指针变量,二维数组传参的本质,函数指针变量,函数指针数组等知识点,以及采用转移表实现计算器的一般功能。

2024-08-14 18:31:28 806

原创 指针(三)

那么在数组传参的时候,传递的是数组名,也就是说本质上数组传参本质上传递的是数组首元素的地址。同理arr[i] 应该等价于 *(arr+i),数组元素的访问在编译器处理的时候,也是转换成首元素的地址+偏移量求出元素的地址,然后解引用来访问的。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型一维数组,parr[i][j]就是整型一维数组中的元素。• &数组名,这里的数组名表示整个数组,取出的是整个数组的地址(整个数组的地址和数组首元素的地址是有区别的)这时候有同学会有疑问?

2024-08-13 11:48:16 1200

原创 指针(二)

下面我也会持续分享有关指针的见解!!!

2024-08-12 18:26:26 1034

原创 指针(一)

下面我也会持续分享有关指针的见解!!!

2024-08-11 18:21:55 1214

原创 【C语言】操作符详解(内带进制换算以及位操作符详解)

进制示例:15的2进制:111115的8进制:1715的10进制:1515的16进制:F重点介绍⼀下二进制:首先我们还是得从10进制讲起,其实10进制是我们生活中经常使用的,我们已经形成了很多尝试:• 10进制中满10进1• 10进制的数字每⼀位都是0~9的数字组成其实二进制也是⼀样的• 2进制中满2进1• 2进制的数字每⼀位都是0~1的数字组成。

2024-08-09 17:14:13 1036

原创 VS实用调试技巧

当程序员写完代码,测试再对程序进⾏测试,直到程序的质量符合交付给用户使用的标准,这个时候就会设置为 release ,编译产生的就是 release 版本的可执行程序,这个版本是用户使用的,无需包含调试信息等。所以这个题目是和环境相关的。程序员在写代码的时候,需要经常性的调试代码,就将这⾥设置为 debug ,这样编译产⽣的是Debug 版本的可执⾏程序,其中包含调试信息,是可以直接调试的。试,也可能是隔离和屏蔽代码的⽅式,找到问题所的位置,然后确定错误产⽣的原因,再修复代码,重新测试。

2024-08-08 18:29:08 984

原创 【C语言】函数递归详解

在计算第40个斐波那契数的时候,使⽤递归⽅式,第3个斐波那契数就被重复计算了39088169次,这些计算是非常冗余的。当我们n输⼊为50的时候,需要很长时间才能算出结果,这个计算所花费的时间,是我们很难接受的,函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归。递归的思路就是把⼀个较⼤的问题,转换为⼀个与原问题相似,但规模较⼩的问题来求解的。递归程序会不断的展开,在展开的过程中,我们很容易就能发现,在递归的过程中会有重复计。斐波那契数的问题通过是使⽤递归的形式描述的。

2024-08-07 19:36:25 396

空空如也

空空如也

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

TA关注的人

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