自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 priority_queue优先级队列(堆)详解。C++经验+1

priority_queue就是用vector 作为 模版,然后里面的数据填充的方法用的是堆算法。所以priority_queue就是堆。只不过是提供了对应接口的堆。不用手动去敲。方法一:默认定义(只指定是什么元素)默认定义:造出来的直接就是一个大顶堆。方法二:定义大顶堆(指定元素以及用什么当模版以及比较函数)上面不是说priority_queue用vector做模版吗?为什么这里我们还要写一遍。

2024-09-25 17:49:30 624

原创 二叉搜索树(来学包会) C++经验+1

二叉树都知道,二叉搜索树就是:每个节点的左子树的值全都小于当前节点的值,右子树的值全都大于当前节点的值。要这个树有什么用?1.二叉搜索树的中序遍历是有序的。2.顾名思义就是为了搜索,线性遍历搜索一个值是全部走一遍,而对于二叉搜索树而言,每走一次就能排除一半的结果。所以就是快。当然也会出现一些特例,如下图所示如果一开始插入的数比后面的数都大,那就变成了一串的。如果这样来搜索,和线性遍历也没区别了,所以后面开发出了AVL树和红黑树解决。注意:二叉搜索树的值是不能被更改的!!!!

2024-09-25 17:49:10 1170

原创 C++内存管理

class Testpublic:Test() //构造函数:_a(0)cout << "构造函数" << endl;~Test() //析构函数cout << "析构函数" << endl;C++://申请delete p1;//销毁//申请free(p2);//销毁申请多个对象和申请内置类型同理。

2024-09-22 17:49:45 997

原创 C++迭代器 iterator详解

它提供了一种访问容器(如列表、集合等)中元素的方法,而无需暴露容器的内部表示。迭代器使得程序员能够以统一的方式遍历不同的数据结构,而无需关心这些数据结构的具体实现细节。类似于指针指向对应的元素并且能对这个元素进行修改和使用。

2024-09-22 17:49:40 1067

原创 C++初始化列表详解 + explicit关键字

使用初始化列表可以提升效率。

2024-09-21 16:49:36 710

原创 C++友元详解

友元分为友元函数和友元类。友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多用。

2024-09-21 16:49:29 374

原创 C++日期类详解 第二级支线任务

上述代码表示了这次要实现的类,包括了多种运算符的重载,以及构造函数,相似的操作符,我们只实现一个。日期类的析构和拷贝赋值函数不用写用默认的,因为日期类用的都是内置类型,没有动态开辟的空间,所以不用考虑深拷贝的问题。

2024-09-20 18:15:29 993

原创 c++类和对象(6个默认成员函数)第二级中阶

/空类之前有说到如果一个类什么都没有是一个空类,但是空类为什么和只有函数的类一样只有1字节的占位符?这就说明了空类只是看着是空,其实其中大有乾坤。顾名思义默认成员函数,那就表示了这些函数如果你没写就自动生成,当然你也可以自己写。只有单个形参,该形参是对本类类型对象的引用(一般常用从const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用。class Datepublic:Date(int year = 0, int month = 1, int day = 1)// 构造函数。

2024-09-20 12:11:59 765

原创 C++类和对象 第二级初阶

将函数的定义和声明都放在类中在头文件中将函数声明在源文件中对函数的实现。注意:定义和声明分离时要指定出是在哪一个类中类的访问限定符c++实现封装的方式:用类把对象的属性(变量)和方法(函数)都放到类中。然后再用访问限定符设置权限,选择性的把部分接口提供给用户。就像淘宝你可以改你自己店铺的图片,但你影响不了网页的整体布局。由权限决定的。【限定符说明】1.public里的接口外部可以用。2.protected 和 private 的接口外部不能使用,区别在于子类。

2024-09-11 16:32:43 821

原创 c++this指针详解 第三级

C++类实例化创建对象,函数是共用的,变量是每个对象独一份的。(第二级内容,类的存储部分)那在函数中要使用成员变量,怎么知道是哪个对象的呢?C++中有一个隐藏彩蛋,在每一个成员函数中都有一个藏着的this指针作为函数的第一参数。this指针就是指向当前调用函数的对象的一个指针,既然是一个指向对象的指针,相对的就可以通过这个指针,获取当前对象的成员变量。this指针的使用public://1、当形参和成员变量同名时,可用this指针来区分//返回对象本身int age;

2024-09-11 16:31:50 397

原创 C++入门知识 第一级

1.正常定义//命名空间的普通定义namespace NS1 //NS1为命名空间的名称//在命名空间中,既可以定义变量,也可以定义函数int a;2.嵌套定义//命名空间的嵌套定义namespace NS1 //定义一个名为N1的命名空间int a;int b;namespace NS2 //嵌套定义另一个名为N2的命名空间int c;int d;3.同一名称的命名空间对于一个工程而言可以有许多相同名字的命名空间。但是最终会被整合为1个命名空间。所以同名的空间也。

2024-09-10 16:24:31 716

原创 结构体大小计算以及对齐规则

4.如果嵌套了结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。就比如int 的 对齐数为4,那他只能在结构体的 0 4 8 12的位置存。0 - 15为16字节,然后找到我们最大的对齐数,这里是double,为8,此时为16字节为8的倍数,所以要开辟的结构体大小就是16字节。注:VS中的默认对齐数为8,不是所有编译器都有默认对齐数,当编译器没有默认对齐数的时候,成员变量的大小就是该成员的对齐数。这个预处理指令中()里填的就是对齐数。

2024-09-10 16:23:54 818

原创 计算机网络练级第一级————认识网络

计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息,因此要想传递各种不同的信息,就需要约定好双方的数据格式,这就是一种纯硬件的一种约定方案。就像我给你发的是一个视频,你不能解析出来一团乱码,或者莫名奇妙给我来一张图片。那就乱套了,协议设定的初衷就是为了数据转发的安全快速完整。因为协议必须要固定且具有权威性,所以不能是有一家公司就做一个协议,那也乱套了。所以必须要由一些行业领导者来制定。有句话说得好“一流的企业做标准,二流的企业做品牌,三流的企业做产品”

2024-09-05 16:55:04 1608

原创 计算机网络练级第二级————网络套接字1

上面的图是在不同的网络协议版本IPV4 IPV6等等,首先他们的前16位一定都是地址类型。用于区分是哪个版本的sockaddr。在绑定时因为我们要用IPV4的协议,所以定义时要定义的是sockaddr_in结构体,定义结束后,在使用bind接口时,我们把&addr强转为sockaddr*。TIPS:既然说是强转那为什么后面这两种版本的sockaddr大于原始sockaddr,那不会出错吗?

2024-09-05 16:54:39 1086 1

原创 C语言希尔排序详解!!!速过

由于第一步的开荒,数组比刚开始有序的多但还是模糊,接下来如果我们把间隙改小,那每一个小组的数字就会增多,但又由于之前第一组的原因其实有些数据已经其实已经到了属于自己的位置,那接下来就会减少损耗(不用交换数据)。总的希尔排序,就是先分组,在排序,每次使模糊的答案清晰一点(每一次的损耗都会减小),最终当gap == 1时,只需轻轻擦拭即可得出答案。这一阶段呢就是要将每个组进行一个排序让其每个组都是有序的,这样形成一个散乱但比之前更有序的结果,可以从图中第一轮结果看出。首先传入一个数组a,和数组个数n。

2024-02-16 17:20:19 714

原创 快速排序详解!c语言

如果left(begin)先走,如果只有最后一个数字比key大这时begin 和 end 相遇,反而把key换到了最后一个位置,而唯一比key大的数字反而去了第一个,那就不满足,左小右大的原则了。快速排序顾名思义,快速的排序,事实也如此,他的应用面广泛同时确实很快,因为他的时间复杂度是o(nlogn),相比前面的(插入冒泡选择)三小只来说,它的速度确实遥遥领先,但相对的思想也更复杂。为什么要从right开始,因为你的key在数组的第一个位置,所以最后一次和key交换的数据一定要是比key小的。

2024-02-16 17:19:16 939

原创 插入排序详解!!!(简单排序),基本功排序C语言版

这是一个插入排序的流程图,插入排序 很像我们玩斗地主,玩牌,斗地主在开始前,我们是不是要给我们手上的牌排序啊,假设我们理牌有一个规矩就是只能一张一张拿起来。并且我们给牌换位置也只能一张一张换。不能中间跳过一张直接换(因为机器和人脑不同)那我们拿起第一张的时候,和上图一样我们拿到一个3,那现在就只有一个3,你也不用排序但我们拿到第二张的时候,这时有两张牌,拿到的是5,它确实比3大,那5就在3的后面就好。

2024-01-05 15:14:57 582 1

原创 选择排序!!!基础排序详解 C语言版

这是一个选择排序的流程图,其实很简单,就是每次挑选数字中最小的作为第一个 ,直到整个数据有序就结束了顾名思义,选择,那就是选取,选取其中最小的,放在最前面的位置,已经选好的位子,下一次就不加入选择了。每一次安排一个位置,直到所有位置都安排了。

2024-01-05 15:14:53 481

原创 C语言 二叉树详解(自我理解版)!!!二叉树的实现

(就如果J 是 E的右节点的话,那E的左节点就没有数据就浪费了一个空间)这里的父节点和子节点的计算可用 公式 child = parent / 2 + 1 (左节点)或 + 2(右节点).。当然既然是链式结构,上面的顺序结构可以找到父亲节点,那链式结构也有办法找到父节点,这就要用的三个指针的结构体,左右孩子节点,再加上父亲节点的指针。如图这是一个完全二叉树,完全二叉树与普通二叉树之间的差别在于,完全二叉树 的每一个子节点必须先有左边的子节点,才能有右边的子节点。:一棵树中,最大的节点的度称为树的度;

2023-12-12 20:37:43 1322

原创 C 语言 二叉树的实现详解!!!(每种方法都详细解释,哪里不会看哪里)

(建议先看后续遍历,就是先遍历全部节点,在进行操作)进行从遍历的最后一个节点开始,进行free,如果用前序遍历free的话,那你第一个根节点都free了你就找不到你的子树了,而中序遍历的话,就比如你刚把D删除了,中序遍历的话就会把 B先删除,那就找不到E节点,E节点就没被删除。那也就明了了 中序遍历就是 你先把左边走到 底 然后 先打印左边,在打印根的,在打印右边的。就像这里的打印的一样,你先把A打印出来了,然后 在走你的左边,打印出B后继续走B的左边,打印出D后,返回到B节点,B又走他的右边 打印E。

2023-12-12 20:35:23 1275

原创 c 语言 堆的解析(自我理解)!!!堆排序,建堆

首先先看一个图片小顶堆的意思就是顶 的元素最小,两个子节点的元素要大于父节点。大顶堆同理。小顶堆就像是一个金字塔。第一层很小,然后后面是依次增大,就像社会人才金字塔图一样。大顶堆就可以想做,每个人的财富拥有值的金字塔图,上层人的钱很多,而底层的人钱最少。那堆能干嘛呢,首先堆是可以用来排序的,而且排序的时间也是较快,处于(n*logn)这个层级。还有一个就是在频繁的出队和入队时,用堆是一个不错的选择。如果用数组和链表来完成pop和push时,时间复杂度是O(n)而用 堆就是O(log n)。

2023-12-08 18:36:18 1166

原创 循环队列详解!!c 语言版本(两种方法)双向链表和数组法!!

首先关于循环队列,你得先知道什么是队列,详情可以去看看我的另一篇博客数据结构 栈与队列详解!!-CSDN博客这里简单的说一下,队列就是字面意思,你在银行排队,你不是什么VIP只是普通人,那你先排队那你就先得服务,队列就是 你先插入的数字(入队),就得先放出(出队)。大致就是这个意思。而循环队列呢?他的原理也是队列,但和队列不同的地方在于,他的空间是固定的。在一个空间里进行重复的入队出队。这是一张循环队列的大致图。其中和队列一样有两个指针指向头和尾。添加实在尾针处加,而删除就是将队首的元素删除。

2023-11-22 14:11:41 241

原创 数据结构 栈与队列详解!!

关于内存中的栈和数据结构中的栈是不同的,本章着重讲的是数据结构的栈。这是一张关于栈的表达图。从图中可以看出栈很像是一副卡牌,发牌时只能从上取出,即出栈。而入栈则是像你出牌后,要把你出的牌压在上一张出的牌上面。这是入栈。栈可以用链表或者顺序表实现,

2023-11-18 18:55:13 394 2

原创 环形链表解析(c语言)c语言版本!自我解析(看了必会)

就以这个为例,当slow走到2的时候,fast已经走到-4,那他两距离相差1,下一次fast和slow必定相遇,因为两人每次走的距离差为1,把slow入环时两者的距离记作N,因为两者的距离差为1,N-1-1-1-1-1......N总有被减到0的时候,减到0那两者就是在一个位置,就相遇了。这就是最普遍的快慢指针,fast走的是slow的路程的两倍,这就是相当于一个追击问题,再跑1000米的时候,你的好朋友的配速是你的两倍,最终他会超你一圈一个道理。就是L的距离等于这么fast走的这么多圈后减掉 X的距离。

2023-11-12 14:00:19 188

原创 贪吃蛇(c语言)!!源码加解析

1.建议先把源码拿去VS中测试一下了解这个贪吃蛇是什么样的1.建议先把源码拿去VS中测试一下了解这个贪吃蛇是什么样的。

2023-11-11 14:54:42 536

原创 双链表!!!

双链表的全称叫做带头双向循环链表,它有个头节点叫做“哨兵位”。哨兵位不存储数据。“哨兵位”存在的意义:遍历循环链表避免死循环。单链表的全称叫做不带头单向不循环链表。区别就是双链表一个格子里要存储前一个空间的指针和后一个空间的指针,然后双链表的尾节点的next指针是指向头结点的,形成一个循环。

2023-10-24 14:21:02 50

原创 单链表(第二部分)单链表的实现!!!

为什么一些接口的参数是二级指针一些是一级指针?因为二级指针可以对 头结点pphead 进行更改,如果只是一级指针的话形参只是一个局部变量并不能更改 pphead 的值。就假如一个 add(int a,int b),你的两个形参都是int并没有用 int * 接收的话,那么传入的值是不会更改的。

2023-10-23 10:41:03 60

原创 单链表,三部分详解(第一部分)单链表的解析

下面的代码表示单链表的节点。假设每节车厢放着下一个车厢的钥匙,你在走到这一节车厢的时候,就能拿到下一节车厢的钥匙,进入下一节车厢,链表就像一大节火车,你在淡季的时候可以把车厢减少一点,旺季的 时候可以多加一点,不会影响其他车厢的使用。这样就相当于往一个结构体里放进一个同类型的结构体指针,就可以同个这个指针指向下一个结构体。链表就是一个在物理储存上非连续,但在逻辑顺序上是连续的指针链接实现。与顺序表不同的是这样的每节车厢的独立空间,我们叫做“节点或结点”。这个节点要保存的是一个数据,和下一个节点的指针。

2023-10-23 09:30:11 60

原创 顺序表第三节(通讯录基础版)

查找通讯录和删除的前提都是一样的,都是用 findbyname 函数找到对应位置的通讯录。这个函数作为中间函数,可以不用写在头文件里,但对于后面几步的操作确实必不可少的。首先这个函数查找的是 用名字找位置(当然你也可以用其他的变量的值作为查找值)。如果返回的是 i 那就是大于0 的,反之为-1 (上面特殊函数的返回值)。如果大于0就代表找到了,利用顺序表删除的接口,删除这一格的通讯录信息。传入两个参数第一个是要查找的通讯录的指针,第二个则是要查找的姓名。让别人输入4个变量的值的过程,也很简单都是基础!

2023-10-21 09:59:09 278

原创 顺序表(第二节)实现和解析

3.对于一个开辟的表的内存,如果size--就说明有数据的空间-1. 下次在插入表数据的时候,直接使用这个空间,这样就是类似一个抽象的删除,因为下次添加数据还是用的这块内存,所以你不用给这块空间的数据清空也可以使用。为什么是 i = ps size -1,因为 ps size 的值 是表示 有数据的空间个数,而对于空间的下标来说,ps size 这个数字的空间下表指向的反而是下一个无数据的空间。4.为什么要判断是否为0呢?判断ps->a的原因是,判断这个指针是不是为空,如果为空,会不执行任何操作直接返回。

2023-10-17 21:13:10 152

原创 顺序表第一部分(介绍篇),三部曲后面分别是实现和介绍

1、顺序表的概念及结构1、顺序表的概念及结构。

2023-10-17 18:33:45 86

原创 编译和链接(小白初理解)

1.翻译环境和运⾏环境1.翻译环境和运⾏环境翻译环境指的是:这个环境中讲我们输入的代码转换为机器可以执行的指令执行环境指的是:就是用来执行代码的,程序的样子。

2023-10-17 13:35:20 48

原创 文件操作 !!C语言

1.为什么使⽤⽂件?首先,没有文件数据没法保存。文件就是用来存东西的,如果我们没有文件,我们写的程序都是存储到内存中,如果程序退出,内存就会回收,数据就没了。就像你在 剪辑视频,你忘记保存了,软件的自动保存时间也没到,电脑断电了,这时你的所有数据就G了都没了。但如果我们把数据都保存到文件里了,下次使用打开文件就可以了。数据依然存在。2.什么是⽂件?文件就是你存在C盘 D盘这些盘里的东西都是文件。但在程序设计中我们一般说的文件有两种:程序文件和数据文件。

2023-10-16 20:50:05 62

原创 联合和枚举!!详解

1. 1联合体类型的声明和结构体类似,联合体也由成员变量组成,这些成员可以是不同的类型。不同的是:联合体只为成员变量里最大的成员提供足够的内存空间。联合体是所有成员共用一块空间。所以也可以叫做共用体。这段代码的结果是 4. 说明联合体只开了 4个字节的空间,说明开辟了int 的空间为最大空间。1.2.联合体的特点因为联合体是一堆成员变量共用一个开辟的空间,所以为了让所有成员都进入得了,所以开辟最大的类型变量的空间,(联合体的引用就是每次取出一个变量)看下面两串代码。

2023-10-14 10:36:45 71

原创 结构体,位段!

1.位段的成员必须是int或signed int,在C99中位段成员的类型也可以选择其他类型。2.位段的成员名后边有⼀个冒号和⼀个数字。int _b : 5;打印出来为8,说明这里有8个字节,上面有4个int 不应该是12个字节吗?1.位段的成员可以是或者是char等类型2.位段的空间上是按照需要以4个字节(int)或者1个字节(char)的⽅式来开辟的。3.

2023-10-13 15:04:35 131

原创 结构体详解!!!

1.结构体类型的声明1.结构体类型的声明结构体就是一些值的集合,然后将这些值成为成员变量。成员变量可以是不同的类型的变量可以用结构体表示一个学生的数据。(其他物品的数据也可以表示),下面是一个描述学生的结构体。这个结构体的名字叫做stu 类型是struct stu 里面有三个成员变量。并且在下面还创建了一个结构体变量 s。当然在其他函数下也可以创建变量,int i = 0,创建的是一个整型。那结构体 的创建就是这样 struct stu yang = {0};下面是对结构体变量进行赋值。

2023-10-11 15:15:56 86

原创 指针详解第三部分

1.字符指针变量1.字符指针变量一种指针类型为字符指针 char*(下面有两个代码表示了两种不同的用法)第一个代码 存了一个字符w。将字符 w 存到了 变量ch的地址上。第二个代码 存了一个字符串。和第一个 指针pc 不同,他不是把 hello bit 存到了pstr 的地址里。而是由pstr 指针指向第一个字符h 的地址。然后找到这串字符。

2023-10-04 11:12:09 107

原创 指针详解第二部分

parr[i][j] 的原型就是 *(*(parr+i)+j ),先取出parr+i 的元素 再取出 parr +i + j 的元素。(整个数组的地址如果加一则跳过整个数组,如果只是首元素的地址,那加一只是到下一个元素的地址。数组传参本质就是,传数组名就是传数组首元素的地址,所以sz2 =1,但 sz1求得是函数外的数组大小所以 = 10.说明用指针来接收数组名,其实是可以计算出数组大小的,因为指针指向的是数组首元素的地址,所以间接就可以计算元素个数。打印出来的结果是一样的,说明指针可以访问数组。

2023-10-03 19:19:30 170

原创 数据在内存中的存储(一个新手的理解)

超过一个字节的数据在内存中存储时,就有存储顺序的问题,按照不同的存储顺序,我们可以把分为大端字节存储和小端字节存储。在不同的编译器中不同。大端存储:通俗来说就是数字的比较大的位数存到了前面。就像 0x11223344,如果为大端存储的话那在内存里面 先存储的就是 11 22 33 44,和上面的图片相反小端存储:就是数字的比较小的位数存到了前面。和上图一样!!!一个自编小口诀,前大大,前小小。就是前面如果是数字位数大的数字的话就是大端存储,反之相同。

2023-10-03 10:33:58 107

原创 字符函数和字符串函数!!,学起来奥

但参数1字符串中出现,参数二中的字符时,会将这个字符符号,改为‘\0’ ,返回的指针是指向的是这个字符串的开头,就类似 字符串 abc,d。和 第二个参数为 ,。那返回的就是a的地址,打印出来的是字符串为abc。第一个参数是 目的地参数,用来 作为主参数,而第二个 source 则是 发源地参数,用来更改目的地参数,第三个参数num 则是用来控制 要更改的字节个数。具体用法和strcmp 一样 只是多出 一个控制字符的 numble 参数,区别和上面的 strncpy 和 strcpy 的区别一样。

2023-09-19 13:40:34 79

空空如也

空空如也

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

TA关注的人

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