自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++】 二叉排序树BST(二叉搜索树)

看似删除节点有4种情况,但实际上a和b和c可以合并,这样就只有2种情况了: a:待删除的结点无孩子/只有一个孩子:删除结点并使父亲结点指向被删除结点的孩子结点(无孩子视为孩子是空结点,任意指向一个即可) b:待删除的结点有左右孩子:采用替换法,寻找删除结点右子树的最小结点(右子树最左结点),将最小结点的值和删除结点的值替换,然后删除最小结点(此时最小结点,要么没有孩子,要么只有一个孩子,符合a情况可以直接删除)若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。,走到空,还没找到,则这个值不存在。

2024-04-22 21:25:35 1050 1

原创 【Linux】进程 基础概念

创建 子进程 那么 子进程 复制父进程的资源 父子进程拥有独立的空间。

2024-04-01 16:05:38 984 1

原创 【C++】继承

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类(或叫做‘子类’)。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。​public:​protected:// 姓名// 年龄​// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。

2024-03-26 21:07:25 841 1

原创 【Linux】环境基础开发工具使用

目录Linux软件管理器 yum1.什么是软件包2.查看软件包3安装与卸载vim-Linux编辑器1.vim基础概念2.vim的基础操作命令模式基本操作底层模式基本操作3、其它模式Linux编译器 gcc/g++1.如何进行编译2.编译的四个过程预处理(-E)编译(-S)汇编(-c)链接动态库与静态库动态库和静态库的转变Linux调试器 gdb基本操作Linux项目自动化构建工具 make/makefile1.什么是make/makefile?2.依赖关系与依赖方法关于 rzsz, 这个工具用于 windo

2024-03-17 21:03:44 901

原创 【C++】模版进阶

优点缺点模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生模板会导致代码膨胀问题,也会导致编译时间变长增强了代码的灵活性出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-03-14 16:32:42 861

原创 【Linux】权限

可执行权限: 如果目录没有可执行权限, 则无法cd到目录中. 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容. 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.在具有粘滞位的目录中,只有文件的所有者、目录的所有者或者 root 用户才能删除该目录下的文件,其他普通用户不具备删除权限。于是, 问题来了~ , 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写权限。

2024-02-29 09:19:26 997

原创 【Linux】基础命令 第二篇

Linux下一切皆为文件:显示器,键盘等的底层都看作文件 为什么要这样设计呢?可以统一接口,统一的方式处理所有事物,方便进行操作。

2024-02-12 17:55:57 956

原创 【C++】list讲解及模拟

list本质上是一个带头双向循环链表,列表是一种用于存储一组元素的数据结构,元素按照插入的顺序排列。它允许动态地添加和删除元素,可以重复存储相同的值。列表提供了对元素的插入、删除、访问和遍历等常用操作。列表是序列容器,允许在序列内的任何位置插入和擦除操作,并在两个方向上进行迭代。列表容器被实现为双链接列表;双链接列表可以将它们所包含的每个元素存储在不同的和不相关的存储位置中。顺序通过与前面元素的链接和后面元素的链接的关联在内部保持。

2024-01-26 18:52:28 1173

原创 【C++】 vector讲解以及模拟

vector是C++标准库中的一个容器类,提供了动态数组的功能。它是一个模板类,可以存储各种类型的元素。vector类封装了对数组的访问、插入和删除等操作,提供了方便和高效的数组操作接口。与普通的数组相比,vector的大小是可变的,可以动态调整。它会自动处理内存分配和释放,简化了管理动态数组的复杂性。可以通过C++标准库中的头文件来包含vector类。使用vectorvector的下标索引从0开始,类似于普通数组。可以使用push_back函数在末尾插入元素。可以使用size函数获取。

2024-01-19 18:14:02 938

原创 【C++】手撕string思路梳理

resetve 开空间,insert任意位置插入,push_back,append,+=,交换。,返回字符串的 C 风格表示,返回字符串长度,返回总容量。erase删除,clear清除,resize缩容。构建string类框架。

2023-12-07 15:57:26 824 11

原创 【C++】string模拟

因此,当我们在下面的类构造函数中将空字符串 "" 传递给 const char* 类型的形参 str 时 , 编译器会自动将其转换为一个空字符 '\0'。一个空字符串也是一个有效的字符串,它不需要以 '\0' 的形式进行显式表示,也就是说,一个空字符串已经包含了一个空字符。浅拷贝是指在进行复制操作时,只复制对象的引用或指针,而不复制对象本身。这意味着原对象和拷贝对象共享同一份数据,深拷贝是指在进行复制操作时,完全复制对象和对象的数据,当其中一个对象修改了数据时,另一个对象也会受到影响。

2023-11-30 22:28:25 636 12

原创 【C++】String类

string是一个表示文本字符串的数据类型。它是一个标准库提供的类,需要包含<string>头文件以及using namespace std;才能使用。使用 string类可以方便地处理和操作文本字符串。与使用字符数组相比,string类提供了更多的功能和灵活性,同时也避免了手动管理内存的复杂性。字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作 单字节字符字符串的设计特性。

2023-11-26 11:45:04 288 14

原创 【C++】const与类(const修饰函数的三种位置)

const是 C++ 中的修饰符,用于声明常量或表示不可修改的对象、函数或成员函数。我们已经了解了const基本用法,我们先进行简单的回顾:声明常量变量:使用const关键字来声明常量,一旦声明为常量,其值就不能被修改。const修饰指针:a).constint x = 5;*ptr = 10;// 错误:试图修改 const 指针所指向的值​int y = 10;ptr = &y;// 正确:const 指针本身可以被修改,指向不同的地址b).constint x = 5;

2023-11-21 16:57:22 188 5

原创 【C++】模版-初阶

函数模板是一个蓝图,它本身并不是函数,是编译器用使用方式产生特定具体类型函数的模具。代码的可维护性比较低,一个出错可能所有的重载均出错 那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。用不同类型的参数使用函数模板时,称为函数模板的实例化。模板参数实例化分为:隐式实例化和显式实例化。重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函 数。

2023-11-17 22:21:12 309 3

原创 【C++】内存管理

什么是内存泄漏:内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏的危害:长期运行的程序出现内存泄漏,影响很大,如操作系统、后台服务等等,出现内存泄漏会导致响应越来越慢,最终卡死。

2023-11-17 21:16:10 207 5

原创 【C++】类与对象 第三篇(初始化列表,explicit,static,友元,内部类)

的。

2023-11-06 12:08:40 183 4

原创 【Linux】 基础命令 第一篇

ls #显示当前路径下的文件名pwd #显示当前我所处的路径touch test.txt # 在当前路径下创建一个普通文件mkdir dir # 当前路径下创建一个目录/文件夹cd ~ # 进入“~”一个路径。

2023-11-05 09:52:12 322 6

原创 【C++】类与对象 第二篇(构造函数,析构函数,拷贝构造,赋值重载)

内置类型就是语言提供的数据类 型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看 下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员 函数。内置类型(基本类型):int/char/double... /任意类型指针 自定义类型:class/structd定义的默认生成构造函数:1.内置类型成员不做处理。2.自定义类型的成员,会去调用它的默认构造(不用传参数的构造)

2023-10-28 22:24:27 368 8

原创 【C++】类与对象 第一篇(class,this)

在C++中,类(Class)是一种用户自定义的数据类型,用于封装数据和方法。它是面向对象程序设计的基本概念之一,通过将相关的数据和方法捆绑在一起,可以更加清晰和灵活地组织代码。类可以看作是一个模板或者蓝图,用于创建对象(Object)。类定义了对象的属性(成员变量)和行为(成员函数)。成员变量是类的数据成员,用于存储对象的状态;成员函数是类的成员操作,用于操作和访问对象的状态。通过使用类,能够将数据和操作封装在一起,实现了数据的隐藏和封装,提供了更好的代码重用性和可维护性。

2023-10-26 18:18:23 238 2

原创 C++入门 第二篇( 引用、内联函数、auto关键字、指针空值nullptr)

当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。// 该行代码会编译失败,因为c和d的初始化表达式类型不同。

2023-10-18 14:49:01 233 3

原创 C++入门 第一篇(C++关键字, 命名空间,C++输入&输出)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// 该命名空间的名字:hardwork// 命名空间中可以定义变量/函数/类型// 命名空间中可以定义变量/函数/类型同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中一个工程中的test.h和上面test.cpp中两个N1会被合并成一个int a;int b;int c;int d;

2023-10-14 21:04:41 569 3

原创 数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

数据结构:排序- 插入排序(插入排序and希尔排序) , 选择排序(选择排序and堆排序) , 交换排序(冒泡排序and快速排序) , 归并排序

2023-10-10 09:33:08 3531 20

原创 VS Code 如何搭建 C/C++开发环境

毕竟这个VScode 默认是英文的,我们使用不习惯的话,可以安装中文插件,将VSCode的界面汉化的,在左边的侧边栏中点击插件,就可以搜索:Chinese,显示的第一个插件就是汉化包,直接安装即可。安装完汉化包后,立马就在右下角提示,如下窗口,点击restart,会自动重启VSCode,即可汉化使用,非常方便。

2023-10-01 11:18:56 985 2

原创 数据结构:线性表之-队列

队列是一种常见的数据结构,用于存储和管理数据的集合。它遵循先进先出(FIFO)的原则,即最先进入队列的元素最先被删除。类比一下,你可以把队列视为排队等待服务的人群,新来的人排在队列末尾,而需要服务的人从队列头部被依次处理。入队(enqueue):将元素添加到队列的末尾。出队(dequeue):从队列的头部删除一个元素,并返回被删除的元素。除了入队和出队操作,队列还可以支持其他操作,如获取队列的大小(元素个数)、判断队列是否为空等。

2023-09-21 22:45:23 282 5

原创 数据结构:树和二叉树之-堆排列 (万字详解)

使用数组实现二叉树相较于链表有以下优势:1. 内存连续性:数组在内存中是连续存储的,而链表中的节点可以分布在内存的任意位置。在某些场景下,数组的内存连续性可以提高访问效率,尤其对于计算机的缓存机制来说,连续的数组元素可以更好地利用缓存行,减少缓存缺失。2. 索引访问:数组可以通过索引直接访问元素,而链表需要从头节点开始顺序遍历才能找到指定位置的节点。通过索引可以快速访问数组中的元素,这在一些特定的操作中是非常有优势的,例如查找某个特定位置的节点、根据节点索引快速更新或删除元素等。3. 空间效率。

2023-09-17 17:58:25 471 20

原创 数据结构:线性表之-循环双向链表(万字详解)

双向链表(Doubly Linked List)是一种常见的链表数据结构。它与普通链表的区别在于,每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点,因此可以从任意一个节点开始,双向遍历整个链表。双向链表的节点通常由三部分组成:数据部分(存储节点的值)、前驱指针(指向前一个节点的指针)和后继指针(指向后一个节点的指针)。相比于单向链表,双向链表可以更方便地进行正反向遍历和节点的插入、删除操作。

2023-09-11 15:16:50 1841 28

原创 解题详解 Leetcode:剑指 Offer 22. 链表中倒数第k个节点;21. 合并两个有序链表;面试题 02.04. 分割链表; LCR 027. 回文链表;LCR 023. 相交链表 ;14

定义快慢指针,先让fast走k步,走完k步跟slow同步走,当fast走NULL时,slow即为要找的节点,返回slow即可。创作不易如果有帮助的话就请留下一个免费的赞吧!

2023-09-09 11:36:08 170 11

原创 leetcode(力扣):203移除链表元素 leetcode(力扣):206反转链表 leetcode(力扣):876.链表的中间结点多种解法

slow一次走一步,fast一次走两步,当fast走到尾的时候slow就走到了中间。偶数有两个中间节点,题目要求返回第二个->fast==NULL;构建两个指针:快慢指针slow,fast。该解法好处在于无需考虑第一步尾插。

2023-09-07 12:57:36 473 11

原创 数据结构:线性表之-单向链表(无头)

单向链表是一种常见的线性数据结构,它由一系列节点组成,每个节点包含两部分:数据和指向下一个节点的指针。每个节点只能访问它后面的节点,而不能访问前面的节点。每个节点包含数据和指向下一个节点的指针。最后一个节点的指针指向空值(NULL),表示链表的结束。可以动态地添加或删除节点,链表的长度可以根据需要进行扩展或缩小。可以根据指针迅速插入或删除节点,而不需要移动其他节点。优点:插入和删除元素的时间复杂度为O(1),不需要像数组一样进行元素的移动;链表长度可以动态调整,没有固定大小的限制。

2023-09-05 14:34:39 1217 18

原创 C语言思维导图

文本:1.个人CSDN文章, 2.C Primer Plus。该导图制作工具:MarginNote 3。该导图为本人创作创作不易。文件1:只含单张思维导图。本文件采用pdf的形式。文件2:思维导图完整版。

2023-08-30 15:10:48 69

原创 数据结构:线性表之-顺序表

顺序列表(Sequential List)是一种使用连续的内存空间存储元素的线性数据结构。顺序列表中的元素按照其在内存中的物理顺序依次排列,同时通过索引来访问元素。顺序列表可以使用数组来实现,数组的下标就是元素的索引。由于数组具有随机访问的特性,即可以通过索引直接访问元素,因此顺序列表在查找指定位置的元素时具有较高的效率。连续的内存空间:顺序列表中的元素在内存中是连续存储的,这样可以通过索引进行快速访问,提高了访问效率。固定大小。

2023-08-26 13:07:29 698 17

原创 数据结构:时间复杂度和空间复杂度计算

算法效率分析分为两种:第一种是时间效率,第二种是空间效率。时间效率被称为时间复杂度,而空间效率被称作空间复杂度。时间复杂度主要衡量的是一个算法的运行速度,而空间复杂度主要衡量一个算法所需要的额外空间,在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。

2023-08-24 17:02:31 705 5

原创 C语言:库函数atoi及其模拟实现

atof是C语言标准库中的一个函数,用于将字符串转换为对应的浮点数/整形数。函数接受一个参数str,该参数是一个指向以null结尾的字符串的指针。atof函数会尝试将这个字符串转换为一个浮点数,并返回转换后的结果。要注意的是,atof函数在进行转换时会自动识别字符串中的浮点数表示形式,包括小数点、指数符号等。它会跳过字符串中的空格字符,直到遇到数字或者正负号。如果无法进行有效的转换,atof函数会返回0.0作为转换结果。

2023-08-21 17:34:51 199 1

原创 C语言:程序环境和预处理

_FILE__进行编译的源文件__LINE__文件当前的行号__DATE__文件被编译的日期__TIME__文件被编译的时间__STDC__如果编译器遵循ANSI C,其值为1,否则未定义__func__当前编译的函数//可以相当于日志写进文件中int main()int i;return 1;for (i = 0;i < 10;pf = NULL;return 0;在预处理阶段已经完成替换int main()return 0;

2023-08-03 10:47:59 302 10

原创 C语言:文件操作

程序文件和数据文件程序文件和数据文件是计算机中不同类型的文件,它们有着不同的作用和用途。

2023-07-31 16:59:03 328 8

原创 C语言练习:杨氏矩阵

解法二:直接利用寻找行时是否有符合比其更小值,若有直接进行寻找(更简便)解法一:利用返回值判断释放某一列是否存在相关数值。

2023-07-28 20:16:26 131 1

原创 C语言练习:字符串左旋

【代码】C语言:字符串左旋。

2023-07-28 20:02:21 53 1

原创 C语言:通讯录(文件操作+动态内存管理) 简易版

本文将对通讯录菜单,通讯录菜单,添加联系人,删除联系人,搜索联系人,打印通讯录进行讲解(即1 2 3 6 0选项)将分成三个文件:test.c //代码测试contact.h // 函数声明contact.c // 函数主体。

2023-07-27 19:50:48 203 10

原创 C语言练习:杨辉三角

【代码】C语言练习:杨辉三角。

2023-07-27 16:42:33 69 1

原创 C语言练习:青蛙跳台问题(一句点醒梦中人)

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。但与之 不同的是 青蛙跳台阶在第二个阶梯位置有两种可能1.跳两次 2.一次跳上去。f(m-1) ,f(m-2) 继续往下延申知道加起来为所有可能。由此可知对应函数为 f (m)=f(m-1)+f(m-2);所以 f(1)=1;

2023-07-26 20:12:56 151 4

C语言思维导图(完整版)

C语言思维导图完整版

2023-08-30

C语言思维导图(单张图)

C语言思维导图(单张图)

2023-08-30

空空如也

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

TA关注的人

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