自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】类和对象(中篇)(全网最细!!!)

对象里面是自定义类型的拷贝构造,如何拷贝呢?class Datepublic://构造函数_day = day;//拷贝构造private:int _day;int _month;int _year;Date B;func B(A);return 0;请看调试:默认生成的拷贝构造会调用其类型的拷贝构造进行拷贝调用过程可以参考一下图:🚩拷贝构造函数典型调用场景:使用已存在对象创建新对象。

2024-01-27 17:49:29 1396 54

原创 【C++】类和对象(上篇)

/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号🍄class为定义类的关键字,Name为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略🍄类体中内容称为类的成员,类中的变量称为类的属性或成员变量,类中的函数称为类的方法或者成员函数1️⃣声明和定义全部放在类体中(需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理public://打印基本信息private://成员变量在这里是声明(没有开空间),开了空间才是定义char* _sex;

2024-01-22 12:25:42 1382 52

原创 【数据结构】队列---C语言版(详解!!!)

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头🚩这里需要定义两个结构体:QNode、Queue,分别表示:队列链表每个节点结构和整个队列链表结构🥰请看代码与注释👇//自定义类型//队列链表每个节点结构}QNode;//整个队列链表结构int size;}Queue;

2023-09-02 18:45:11 2849 67

原创 【数据结构】栈---C语言版(详解!!!)

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。🥰请看代码与注释👇//自定义类型//创建栈的结构int top;}ST;

2023-09-02 14:38:40 1506 46

原创 【数据结构】带头双向循环链表---C语言版(单链表我们分手吧,不要再找我玩了!!!)

在前面我们学习实现了单链表(无头单向不循环链表),这里我们引入带头双向循环链表很明显这两种链表的结构截然不同,但都是作为链表最常使用链表结构前者因其结构上的缺点而作为面试考题的常驻嘉宾,而且复杂麻烦后者则是以结构最优著称,实现起来也是非常的简单(少了单链表头节点,尾节点,前一节点等问题的困扰),可以说是最屌的链表结构🤭🥰请看代码与注释👇//自定义类型//创建双向链表//前址域//后址域//值域}LTNode;

2023-08-30 17:15:43 1393 89

原创 LeetCode 138.复制带随机指针的链表

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。构造这个链表的 深拷贝。深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。

2023-08-26 16:24:44 1664 65

原创 LeetCode 142.环形链表II

一个指针从相遇点开始走,一个指针从链表头开始走,最终他们会在入口点相遇。

2023-08-20 08:30:24 1270 84

原创 LeetCode 141.环形链表

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

2023-08-18 16:28:14 1295 65

原创 LeetCode 160.相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null

2023-08-16 10:47:14 1943 59

原创 LeetCode 21.合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

2023-08-13 15:31:33 621 55

原创 LeetCode 206.反转链表

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

2023-08-12 13:52:19 770 62

原创 【C++】语法小课堂 --- auto关键字 & typeid查看实际类型 & 范围for循环 & 空指针nullptr

🚩在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto定义的变量的类型由变量定义和初始化语句等号的右边的值的类型决定,auto声明的变量必须由编译器在编译时期推导而得举个栗子看一下:👇return 10;int a = 10;auto b = a;return 0;

2023-08-07 13:34:54 695 114

原创 【C++】初阶 --- 内联函数(inline)

🦀宏的优缺点:🚩优点:1.增强代码的复用性2.没有类型的严格限制2.提高性能🚩缺点:1.不方便调试宏(因为预编译阶段进行了替换)2.导致代码可读性差,可维护性差,容易误用(语法坑很多)3.没有类型安全的检查🦀内联函数的优缺点:🚩优点:1.inline定义的内联函数,函数代码被放入符号表中,在使用时进行替换(像宏一样展开),不需要建立栈帧,效率很高2.类的内联函数也是函数。编绎器在调用一个内联函数,首先会检查参数问题,保证调用正确,像对待真正函数一样,消除了隐患及局限性。

2023-08-06 15:37:43 569 72

原创 【C++】初阶 --- 引用(超级详细版!!!)

🥰请看代码与注释👇int a = 10;// int& ra;// 该条语句编译时会出错 int & ra = a;TestRef();return 0;🚨int& ra;该条语句编译时会出错,是不可以的,必须要进行初始化🚩传引用传参(任何时候都可以)1、提高效率2、输出型参数(形参的修改,影响实参)🚩传引用返回(出了函数作用域对象还在才可以用)1、提高效率2、修改返回对象。

2023-07-31 11:46:13 625 100

原创 【C++】入门 --- 缺省参数&函数重载

C++(g++编译环境)这种名字修饰规则使得标识名相同,形参不同的函数在符号表中得到了区分,因此编译器在编译和链接的过程中就能根据函数调用语句具体的实参类型明确地找到相应重载函数的函数体的地址并访问函数体中的指令,实现了重载函数的调用。C语言中不存在这种名词修饰规则,因此在符号表中标识名相同的函数的符号表命名也是相同的,所以编译器在编译和链接的过程中无法对同标识名函数进行区分,所以无法实现函数重载。

2023-07-26 17:35:07 934 92

原创 【C++】入门 --- 命名空间

本篇文章是《C++ 初阶》 专栏的第一篇文章,从本专栏开始就进入了C++的学习了哦!本篇的内容是C++入门:命名空间的学习希望烙铁们可以理解消化哦🥰!!!🚩C++是一种计算机高级程序设计语言,由C语言扩展升级而产生 ,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。🚩C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计。

2023-07-23 15:55:35 821 100

原创 【数据结构】单链表---C语言版(全网最最最最细!小白必必必必看!!!有图有真相!)

终于放假啦!🤩🤩停更了两个月,在假期要把欠下的补回来&有规律的学习!🤓本篇文章来自《数据结构与算法》 专栏,本篇的内容是单链表的学习,也是数据结构的基础,希望烙铁们可以理解消化哦🥰!!!🥰请看代码与注释👇//自定义类型 typedef int SLTDataType;//创建单链表 typedef struct SListNode {} SLTNode;

2023-07-13 11:05:49 729 87

原创 【数据结构】顺序表---C语言版(数据结构开篇小菜,全网最详细!小白看一遍就学会!!!)

停更了一个月限定返场啦😍从本篇文章开始就进入了我们数据结构的学习喽!本篇文章也是《数据结构与算法》 专栏的第一篇文章,本篇的内容是顺序表的学习,也是数据结构的开胃小菜,希望烙铁们可以理解消化哦🥰!!!在我们学习顺序表之前呢,我们大家肯定会有疑问,什么是数据结构,为什么要去学习数据结构,顺序表在数据结构里面代表什么呢?,这里我来给大家一次解惑,让大家真正的搞懂数据结构,学习起来才更加有动力🥰!🚩简单地说,数据结构是以某种特定的布局方式存储数据的容器。

2023-05-22 19:46:41 1934 111

原创 LeetCode 27.移除元素

创建一个新数组 **tmp**,大小为 **numsSize**;同时把原数组 **nums**中,不等于 **val**的数据,放到新数组 **tmp**中;然后再把 **tmp**中的数据拷贝回到原数组 **nums**中;

2023-04-22 13:57:44 1721 80

原创 文件操作【下篇】

从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。如果从磁盘向计算机读入数据,则从磁盘文件中读取数据输入到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序 中每一个正在使用的文件开辟一块“🔴数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是。形式存到内存里,内存里的数据不加任何转换直接写入。🚩让文件指针的位置回到文件的起始位置。码的形式输出到磁盘,则磁盘中占用。

2023-04-20 18:39:22 568 67

原创 文件操作【上篇】

🚩每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构变量中的,该结构类型是由系统声明的,取名 **FILE**🚩不同的C编译器的**FILE**类型包含的内容不完全相同,但是大同小异的🚩每当打开一个文件的时候,系统会根据文件的情况自动创建一个**FILE**结构的变量,并填充其中的信息,使用者不必关心细节🚩一般都是通过一个**FILE**的指针来维护这个**FILE**结构的变量,这样使用起

2023-04-16 12:32:06 476 84

原创 LeetCode 189.轮转数组

🚨我们使用 reverse逆置函数的时候要注意:数组下标是从 0 开始的🚨我们还需要注意一个问题:如果 k 超过了数组元素个数怎么办?比如:数组是 [ 1 2 3 4 5 6 7] ,k = 8 的时候,此时数组元素个数为 7,而要求向右旋转 8 个位置,如果按照上面分析的情况,第一趟对前 n - k 逆置,也就是 7-8个逆置,难道对前 -1 个逆置吗?仔细想一下最后的结果会是什么?结果数组就是 [ 7 1 2 3 4 5 6 ]🚨我们要记住这道题的核心叫 轮转数组,也就是当轮转的次数

2023-04-13 18:46:40 1101 52

原创 动态内存管理【下篇】

如果我们的代码是在一个给别人用的函数中,你在里面做了二次内存分配,并把整个结构体返回给用户。所以,如果我们把结构体的内存以及其成员要的内存一次性分配好了,并返回给用户一个结构体指针,用户做一次free就可以把所有的内存也给释放掉。🔴1.栈区(stack):在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。),数据段的特点是在上面创建的变量,直到程序结束才销毁,所以生命周期变长。分配空间的,栈区的特点是上面创建的变量出了作用域就销毁。🔴实际上普通的局部变量是在。

2023-04-12 17:32:56 634 87

原创 动态内存管理【上篇】

C语言提供了一个动态内存开辟的函数:👇这个函数向内存申请一块连续可用的空间,并返回指向这块空间的指针🔴如果开辟成功,则返回一个指向开辟好空间的指针🔴如果开辟失败,则返回一个NULL指针,因此 malloc函数的返回值一定要做检查🔴返回值的类型是void* ,所以 malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己来决定🔴如果参数 size为0,malloc的行为是标准是未定义的,取决于编译器可以参考一下 cplusplus 中的资料👇。

2023-04-11 16:01:28 601 87

原创 自定义类型 (位段、枚举、联合体)

📍位段的声明和结构是类似的,有两个不同:🚩位段的成员必须是 int、unsigned int、或signed int🚩位段的成员名后面有一个冒号和一个数字struct A {int _a : 2;int _b : 5;🚩这里的A是位段类型🚩这里的位指的是二进制位那位段 A的大小是多少?🥰请看代码与注释👇enum Sex {//枚举未来的可能取值,默认是从0开始,递增1的 //枚举常量 MALE , FEMALE , SECRET };return 0;enum Sex {

2023-03-26 15:36:11 734 97

原创 自定义类型 (结构体)

🚩 请看代码(1)👇struct S {int a;char c;} s1;struct S s;🚩 请看代码(2)👇struct S {int * ptr;return 0;

2023-03-23 16:23:11 1091 94

原创 字符函数和字符串函数【下篇】

🚩(1)在字符串str1中找字符串str2第一次出现的位置,如果找不到则返回一个空指针(NULL)可以参考一下 cplusplus 中的资料👇🔴(1)请看示例代码👇printf("找不到\n");🔴(2)模拟实现 strstr函数👇s1 = cp;s1 ++;s2 ++;return cp;} cp ++;printf("找不到\n");

2023-03-20 12:14:36 722 99

原创 字符函数和字符串函数【上篇】

🚩(1)字符串已 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ’\0’ 前面出现的字符个数(不包含 ‘\0’)🚩(2) 参数指向的字符串必须要以 ‘\0’ 结束🚩(3)注意函数的返回值为 size_t ,是无符号的🚩(4) 学会strlen函数的模拟实现可以参考一下 cplusplus 中的资料👇🔴(1)请看示例代码👇return 0;🔴(2)请看示例代码👇return 0;🚨因为它会一直向后找,直到找到 ’\0’ 才停止,所以输出的是个随机值。

2023-03-18 17:18:44 677 80

原创 快排函数 -- qsort函数(Quick Sort)

👁️qsort()函数是C语言库函数中的一种排序算法,其用到的排序思想是快速排序(quicksort)。它的独特之处在于可以排序任意类型的数组元素(整型、浮点型、字符串和结构体类型)可以参考一下 cplusplus 中的资料👇🔴使用qsort来排序整型数组,这里就由qsort函数的使用者来提供一个比较函数(自定义函数),这个比较函数能够比较2个整数的大小🔴。

2023-03-16 12:25:06 4742 87

原创 指针和数组笔试题解析【下篇】

🔴(1)这里因为 p 是结构体类型+1,+1跳过20个字节,因此结果为0x100014(十六进制)🔴(2)这里 p 被强制类型转换为整型,所以 p+1 就是整型+1,因此结果为0x100001🔴(3)这里 p 被强制类型转换为整型指针,所以 p+1 跳过4个字节,因此结果为0x100004

2023-03-14 23:15:19 674 74

原创 指针和数组笔试题解析【上篇】

📍数组 – 能够存放一组相同类型的元素,数组的大小取决于数组的元素个数和元素类型📍指针 – 地址 – 指针变量,大小是4/8个字节📍数组是数组,指针是指针。二者不等价📍数组名是数组首元素的地址,这个地址就可以存放在指针变量中📍我们就可以使用指针来遍历数组👀数组名:🔴数组名大部分情况下是数组首元素的地址🔴但是有2个例外:🔴sizeof(数组名) – 数组名表示整个数组,计算的是整个数组的大小🔴&数组名 – 数组名表示整个数组,取出的是数组的地址。

2023-03-13 06:13:06 715 94

原创 指针的进阶【下篇】

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

2023-03-01 20:29:20 644 76

原创 指针的进阶【中篇】

数组指针 ---- 指向数组的指针 ---- int arr[10];函数指针 ---- 指向函数的指针 ---- int (*pf)(int, int) = Add;整型指针 ---- 指向整型的指针 ---- int *字符指针 ---- 指向字符的指针 ---- char *💡当函数的参数部分是一级指针的时候,可以接收什么参数?💡当函数的参数部分是二级指针的时候,可以接收什么参数?🌰在此基础上我们可以写一个简单的计算器👇。🌰再举个栗子,请看代码👇。🥰希望烙铁们能够理解🥰。🥰希望烙铁们能够理解🥰。

2023-02-26 08:23:47 1100 86

原创 指针的进阶【上篇】

👉类比一下:整型指针 ---- 指向整型的指针int a = 10;字符指针 ---- 指向字符的指针数组指针 ---- 指向数组的指针 ---- 存放的是数组的地址取出的是数组的地址。

2023-02-24 07:53:55 1594 90

原创 数据在内存中的存储【下篇】

🔴IEEE 754对有效数字M和指数E,还有一些特别规定:前面说过,1

2023-02-22 15:12:43 1251 89

原创 数据在内存中的存储【上篇】

💡char ---------- 字符数据类型 ----- 1 byte(8 bit)💡short --------- 短整型 -------------- 2 byte(16 bit)💡 int ------------- 整型 ---------------- 4 byte(32 bit)💡long ---------- 长整型 -------------- 4/8 byte(32/64 bit)💡long long ---- 更长的整型 ------- 8 byte(64 bit)

2023-02-20 15:41:15 1474 94

原创 【C语言刷题】倒置字符串

🔴首先我们定义一个字符数组来存放字符串,然后用 gets函数来读入字符串,接下来进行处理阶段,设计一个逆序函数逆序整个字符串,然后再逆序每个单词,最后处理一下细节再输出

2023-02-19 14:16:22 780 77

原创 实用调试技巧【下篇】

1. 编译型错误👉直接看错误提示信息 解决问题,或者凭借经验就可以搞定,相对简单🔴2. 链接型错误👉看错误提示信息,主要在代码中找到错误信息中的标识符,然后定位问题所在。一般是**标识符名不存在或者拼写错误(ctrl + F 可以进行搜索)🔴3. 运行时错误👉借助调试,逐步定位问题,最难搞

2023-02-17 15:14:37 2576 113

原创 实用调试技巧【上篇】

Bug一词的原意是臭虫或虫子。第一代计算机是由许多庞大的真空管组成,并利用大量的电力来使真空管发光。引得一只小虫子Bug钻进了一支真空管内,导致整个计算机无法工作。研究人员费了半天时间,总算发现原因所在,把这只小飞蛾从真空管中取出后,计算机又恢复正常。研究人员就把这只小飞蛾贴到了当天的工作日记上,从此这只小飞蛾名留青史,后来,bug这个名词就沿用下来。👉Debug 通常称为调试版本,它包含调试信息,并且不会作任何优化,便于程序员调试程序。👉Release 称为发布版本。

2023-02-15 16:20:54 3518 83

原创 【C语言】操作符详解(下篇)

👇看代码👇我们想把这段条件表达式改用条件操作符可以怎么写?🤗简洁方便了很多☝️。

2023-02-13 13:42:53 607 98

空空如也

空空如也

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

TA关注的人

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