自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构——双向链表

我们之前学过单链表,也就是无头单向非循环链表。那么我们今天学的是带头双向循环链表。虽然它的结构相较于单链表复杂一些,但在实际应用中具有很好的应用意义。带头的意思就是带有一个哨兵位的头结点,此结点用来存放头结点,不存放有效数据。之前单向链表只可以指向下一个链表,双向就可以指向上一个。循环则是指可以从最后一个链表循环到第一个。}LTNode;

2023-12-06 19:52:38 1974 14

原创 数据结构——图解链表OJ题目

学完了单链表之后,我们对其基本结构已经有了一定的了解,接下来我们通过一些题目强化对链表的理解,同时学习一些面试笔试题目的新思路以及加强对数据结构单链表的掌握。

2023-12-01 21:10:12 1485 17

原创 数据结构——单链表

图解单链表指定位置插入和删除操作!

2023-11-26 18:48:09 1486 17

原创 数据结构——线性表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串。线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。如下图所示:顺序表一般可以分为:(1)静态顺序表:使用定长数组存储元素。

2023-11-25 19:07:42 1220 13

原创 数据结构 —— 复杂度讲解

数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。算法(Algorithm):就是定义良好的计算过程,它取一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。

2023-11-14 20:07:21 70 12

原创 C语言----单身狗问题

我们这样思考,当把数组中所有的数字异或时,得到的结果是两个只出现一次数字的异或,以上面的数组为例,异或得到的结果就是5^6,那我们将原始数组进行分组,把5和6分开,再让两个分开后的数组自己异或,就能得到结果。以上面数组为例,5的二进制位是101,6的二进制位是110,我们可以按照第一位0或1进行分类,第一位为1的数组可分为1 1 3 3 5,第一位为0的数组可分为2 2 4 4 6,于是我们就完成了分类,假如第一位是相同的,那么我们就可以找第二位0或1进行分类。最终得到的值就是只出现过一次的值。

2023-11-14 12:05:55 130 5

原创 C语言进阶知识(十一)

当我们写一个通讯录的时候,我们总是在重新打开的时候输入信息,退出时信息删除,那么我们能不能把通讯录写入文件,这样方便我们读写内容,所以我们用到了文件。磁盘上的文件是文件。在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。

2023-11-13 19:36:34 56 3

原创 C语言进阶知识(十)

这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针。(1)如果开辟成功,则返回一个指向开辟好空间的指针。(2)如果开辟失败(一般是开辟的大小过大,就无法开辟成功),则返回一个NULL指针,因此malloc的返回值一定要做检查。(3)返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定。

2023-11-01 20:20:08 40 4

原创 C语言进阶知识(九)

目录自定义类型详解1.结构体1.1 结构体的声明及使用1.2特殊的结构体1.3结构体的自引用1.4结构体变量的初始化1.5 结构体内存对齐1.6 结构体传参2.枚举2.1枚举类型的定义2.2 枚举的使用3.联合体3.1 联合类型的定义4.2 联合的特点4.3 联合大小的计算enum Day//星期Mon,Tues,Wed,Thur,Fri,Sat,Sun。

2023-10-21 11:54:23 72 8

原创 C语言进阶知识(八)

内存拷贝函数,可能拷贝字符串,整形数组,结构体等等,所以设置成哪一种固定类型都不合适,所以参数设置void*。(1)要把arr+4的值赋给arr+2,以16个字节,也就是4个整型拷贝,新的数组为:{1,2,5,6,7,8,7,8,9,10,0,0....}(2)要把arr+4赋给arr+6,以16个字节,也就是4个整型拷贝,新的数组为:{1,2,3,4,5,6,5,6,7,8,0,0,0...}数组内现在储存的是{1,2,3,4,5,6,7,8,9,10,0,0,0,0,0,0,0,0,0,0};

2023-10-18 18:14:00 52 8

原创 C语言进阶知识(七)

这是因为此函数的返回值为size_t,是无符号的,所以系统计算的是-3,此时负号1不当符号位处理,当做数值1来处理,那这就是一个很大的数值,故出现的是大于。如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。(1)字符串'\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。我们编写函数,以\0作为判断字符个数的标志,没遇到\0,count++,指针也往前走,遇到后跳出循环,不算\0作为字符的个数。

2023-10-14 21:56:42 87 8

原创 C语言进阶知识(六)

大家一定很好奇,随机值是什么意思,我们在前提知识说过,strlen遇到\0才会停止,而我们数组里没有\0,那么函数就会在内存中一直找,直到找到\0,所以就是随机值。我们用vs,它内存储存是小端储存,我们描述它在内存中按以下方式储存,那么&a就是整个数组的地址,&a+1应该是一个数组指针,强制转化为整型指针,此时应指向图示位置,移动了一个数组,那么当a转化为int类型时,+1就应该仅仅只走一个字节,也就是下图所指位置,所以当ptr1[-1]打印时,就相当于打印04 00 00 00,且以十六进制打印;

2023-10-11 22:13:28 67 5

原创 C语言进阶知识(五)

这一段函数是核心,其核心思想利用bubble_sort函数传进来的函数指针,进行对元素的比较,由于bubble_sort可实现对所有数据的排序,所有我们要使用指针,而不是像冒泡排序那样直接进行比较,if (cmp((char*)base + j * size, (char*)base + (j + 1) * size) > 0)这一段函数就实现了判断,之所以这里使用char*是为了解引用时候只读一个字节,这样可以和后面的相乘联系起来。那么我们今天,基于冒泡排序的思想,模拟实现qsort函数。

2023-10-09 21:19:49 58 9

原创 C语言进阶知识(四)

int (*p)(int,int)为函数指针,int(*p[4])(int,int)为函数指针数组,那么我们如果要&p,得到p的地址,此时我们就需要来存放函数指针数组的地址,也就是指向函数指针数组的指针,于是我们写出int(*(*p)[4])(int,int)=&p;如果你把函数的指针(地址)作为参数传递给另一个函数,当 这个指针被用来调用其所指向的函数时,我们就说这是回调函数。函数指针,我们依旧类比概念:字符指针是指向字符的指针,储存的是字符的地址,同理:函数指针是指向函数的指针,储存的是函数的地址。

2023-10-02 18:05:28 100 5

原创 C语言进阶知识(三)

这是因为地址是物理的电线上产生的,32位机器----32根地址线-----每根地址线产生1/0的电信号,那么以32位平台为例,32个0/1组成的二进制序列就需要4个字节来储存,同理,可推测64位平台就需要8个字节来储存地址了。这个问题先留给大家去思考。我们把整个数组的地址存在数组指针中,此时,数组指针就是指向数组的指针,储存的是数组的地址,所以要用&arr。对二维数组打印时,我们有两种常见办法,一种是用数组接收然后打印,另一种是用数组指针接收,并打印,下面给出这两种方法的函数,可根据自己的理解进行学习。

2023-09-27 22:14:38 139 9

原创 C语言进阶知识(二)

在此例中,我们将M转换时前面并没有添加1,而是添加0,这是因为E全为0,这说明原来的E应该是-127,2^(-127)一定是个极小的数,至少要比1小很多,若我们添加为1相当于增大原来的数字,误差过大。对于E,我们认为它为无符号整数,但实际上我们的E存在负值,如果E为8位,取值范围为0-255;对于M,我们有另类规定,M可写为1.xxxxxx,我们在储存时候省略1,只保存xxxxxx,这样的目的是增加有效数字的位数,如32位,有效数字可增加为24位。(-1)*S表示符号位,S为0,V为正数;

2023-09-21 17:27:42 237 9

原创 C语言进阶知识(一)

C语言进阶知识(一):数据在内存中储存。介绍整形家族的存储方式:补码;大小端概念和符号位概念。

2023-09-20 20:50:12 116 9

空空如也

空空如也

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

TA关注的人

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