自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【数据结构】红黑树相关知识详细梳理

红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。 例如: 1. 每个结点不是红色就是黑色 2. 根节点是黑色的 3. 如果一个节点是红色的,则它的两个孩子结点是黑色的 4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点

2024-10-03 18:55:10 916

原创 【数据结构】AVL树相关知识详细梳理

总的来说,AVLTree实现的关键在于理解旋转原理,尤其是双旋中的不同情况。AVL树是一棵绝对平衡的二叉搜索树,其要求每个节点的左右子树高度差的绝对值都不超过1,这样可以保证查询时高效的时间复杂度,即。但是如果要对AVL树做一些结构修改的操作,性能非常低下,比如:插入时要维护其绝对平衡,旋转的次数比较多,更差的是在删除时,有可能一直要让旋转持续到根的位置。因此:如果需要一种查询高效且有序的数据结构,而且数据的个数为静态的(即不会改变),可以考虑AVL树,但如果一个结构还需要经常修改,就不太适合。

2024-09-26 22:34:50 985

原创 【STL】map和set相关知识详细梳理

1. set是按照一定次序存储元素的容器。2. 在set中,元素的value就是key,并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。3. 在内部,set中的元素总是按照其内部比较对象(类型比较)自己的准则进行排序。4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代。5. set在底层是用二叉搜索树(红黑树)实现的。3. set 使用。

2024-09-20 12:59:53 1084

原创 【数据结构】二叉搜索树相关知识详细梳理

可以看到,二叉搜索树的最优和最差情况性能相差非常大,为了解决二叉搜索树的退化问题,就出现了AVL树和红黑树。实现中序遍历是为了方便打印观察,看看再执行插入删除的操作后,二叉搜索树的性质有没有发生错误。每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。K模型即只有key作为关键码,结构中只需要存储Key即可。情况c与b类似,不再举例。

2024-09-08 11:12:38 740

原创 【Linux】常见指令及权限相关知识详细梳理

语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。 对于文件,将列出文件名以及其他信息。 常用选项: -a 列出目录下的所有文件,包括以 . 开头的隐含文件。 -d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录 -i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件 -k 以 k 字节的形式表示文件的

2024-09-05 13:53:56 1152

原创 【C++】多态相关知识详细梳理

1.多态是由虚表来实现的。2.虚函数重写是通过覆盖父类拷贝过来的虚表中的对应函数地址来实现的。并且在调用过程中是使用父类的接口和子类的方法。3.父类和子类的虚表并不是同一个。派生类中也可以有多个虚表地址,例如多继承。4.虚表地址存在对象的头四个字节处(32位)。5.重载,重写以及重定义容易混淆,需要理清。6.多态是在运行时确定的,属于动态绑定。7.可以定义纯虚函数实现抽象类强制派生类重写。(不重写就不要定义虚函数)

2024-09-02 20:36:45 819

原创 【C++】继承相关知识详细梳理

什么是继承: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。 继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程,继承是类设计层次的复用。 举例说明:2.继承的使用方法 2.1定义格式 还是以上面的例子为例: 继承方式和访问限定符有: 两者使用的关键字相同,但使用的位置不同,继

2024-09-01 16:01:18 1114

原创 【STL】list容器的使用以及模拟实现

list的封装比较复杂,如果是声明和定义分离的话,要注意指定类域到底是哪一个,要搞清list主体,list节点,list迭代器之间的关系,以及模板内部传参是如何向下传递的。最主要的难点就在于迭代器的实现,而且模板的使用过程中可能经常因为语法不正确而报一大堆错,需要细心检查。

2024-08-27 23:17:33 731

原创 【STL】容器vector的使用以及模拟实现

vector的底层数据结构是顺序表,因此它拥有顺序表的优点与缺点,他的扩容逻辑也和顺序表一致,同时,vector是一种泛型的顺序表,可以适用于任意数据类型的顺序表存储。实现时要把握模板的通用特点,具体实现中要强调“通用”,可以在实现中自己体会。需要重点注意的是insert函数和push_back函数实现中的扩容会导致原本传入的迭代器失效,需要更新,否则会导致逻辑错误(可参考我的代码以及标注理解)。

2024-07-31 01:09:37 748

原创 【C++】初步认识STL

全名,不仅是一个可复用的组件库,而且。

2024-07-30 23:37:42 196

原创 【C++】模板基本知识详细梳理

有了函数模板之后,交换函数就可以简化为一个统一的函数,可以完成各种类型,包括自定义类型的交换(前提是自定义类型的拷贝构造是正确的,因为temp对象创建时要调用T类型的拷贝构造)。

2024-07-19 22:05:09 933

原创 【C++】内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】//除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2024-07-17 21:14:35 622

原创 【C++】构造函数和析构函数等内容详解

如果一个类中什么成员都没有,简称为空类.但是空类中并不是什么都没有,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有 一个合适的初始值,并且在对象整个生命周期内只调用一次。 若不使用构造函数:可见对于Date类,可以通过Init函数对d1对象进行初始化,例如设置日期等,但是如果每次创建对

2024-07-17 00:30:41 790

原创 【C++】类和对象的基本知识梳理

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。2.2成员函数的定义方式:class stupublic:private:注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2024-05-09 23:47:56 572

原创 【C++】函数重载/缺省参数/内联/引用等相关知识详细梳理

缺省参数是声明或定义函数时为函数的参数指定的一个缺省值。在调用该函数时,如果没有指定的实参,则采用该形参的缺省值,否则使用指定的实参 例如: 输出结果: 全缺省参数即所有参数都是缺省参数 例如: 1.2.2半缺省参数 半缺省参数是介于全缺省和不缺省参数之间的一种,即参数中既有缺省参数,也有不缺省的参数。 注意:半缺省的次序一定是从右往左缺省。(否则会有歧义) 例如:

2024-04-29 23:25:58 608

原创 【C++】命名空间相关知识梳理

首先,定义命名空间要使用命名空间的关键字namespace,// 命名空间中可以定义变量/函数/类型int val;}//注意这里没有“;注意把命名空间和结构体定义区分,命名空间最后没有 “;

2024-04-25 20:37:12 283 3

原创 【C语言】树与二叉树知识详细梳理

数据结构树

2024-04-14 01:30:03 652 1

原创 【C语言】编译与链接相关知识梳理

•。

2024-02-01 15:19:44 732 1

原创 【C语言】文件操作相关知识梳理

我们写的程序的数据是存储在电脑的内存中的,如果程序退出,内存回收,数据就丢失了,等再次运行程序,是看不到上次程序的数据的,所以为了将数据进行持久化的保存,会使用文件。

2024-01-30 15:52:00 799 1

原创 【C语言】结构体相关内容详细梳理

结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。在C语言中,我们可以定义结构体变量来方便的创建变量的集合。

2024-01-29 00:32:54 1071

原创 【C语言】整数和浮点数在内存中的存储

从它们的存储差异就可以看出,double类型(双精度浮点数)的精确度要大于float类型(单精度浮点数)。由于浮点数存在存储精度,所以他对于有些小数可以精确存储,而对于有些小数确不能精确存储。int(signed int)类型占四个字节,表示范围为-32768~32767。char(signed char)类型占一个字节,表示范围为-128~127。(−1)^S:表示符号位,当S=0,V为正数;那么我们只需要存储S,M,E的值就可以还原出浮点数的值。M:表示有效数字,M是大于等于1,小于2的。

2024-01-19 10:17:28 499 1

原创 【C语言】字符函数和内存函数梳理

字符串以'\0'作为结束标志,strlen函数返回的是在字符串中 '\0' 前⾯出现的字符个数(不包含'\0' )。参数指向的字符串必须要以 '\0' 结束。函数的返回值为size_t,是无符号的。strlen的使用需要包含头文件。

2024-01-18 20:31:49 1264

原创 【C语言】指针内容详细梳理

如果把电脑内存理解为一个个小房间,其最小单位为bit,也就是说每一个小房间中都“住着”一个“1”或者“0”。那么以上就是内存中一个字节,保存数字“8”的表现形式。地址的发明是为了好的管理内存,就好像为每个房间标上门牌号一样,地址为每个字节内存编址,方便内存的管理和使用。

2024-01-18 13:49:45 1131 1

原创 Visual studio环境下scanf不安全解决办法

在vs(Visual studio)的环境,如果你直接使用scanf函数,可能会遇到下列情况导致程序无法正常运行:我们可以分析一下大致意思是:有两个方法可以解决问题:1.scanf这个函数“不安全”,可以考虑使用scanf_s来替代。2.可以用_CRT_SECURE_NO_WARNINGS来禁用警告。

2023-12-10 00:25:37 388 1

原创 【c语言】扫雷游戏的实现

首先在写代码之前可以先整理思路,将程序的各个功能部分抽象分离,再分别实现代码细节,使得各部分条例清晰,同时方便调试。在开始之前,先创建项目。大概像这些区分头文件,源文件即可。其中头文件中存放函数声明,宏定义,头文件包含等代码。源文件中的game.c存放具体的函数实现,test.c则负责测试和整理各个组分的功能。

2023-11-05 15:49:16 73 1

原创 【c语言】分支结构与循环结构

为何要有分支与循环?分支与循环是编程语言中非常重要的概念,它们可以使程序员更好的控制程序的逻辑,也使得程序更好的贴合现实生活,更好的服务生活。

2023-10-22 22:24:30 150

原创 记录自己状态的第一个博客

目前仅仅掌握了c语言的基础语法,对算法和结构也只是微微涉猎,通过一段时间的算法题训练后,写代码,自学的能力都有了一定提升。现在仍然保持着对知识的渴望和强烈的上进心,保持着主动学习的习惯,主动探索新知,并且不断虚心向前辈求教。在上进心不断催促我前进的过程中,我也深知心急吃不了热豆腐,时刻提醒自己保持耐心,坚持良好的学习习惯,耐心阅读和听课。

2023-10-11 00:07:53 41

空空如也

空空如也

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

TA关注的人

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