自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 红黑树详解

红黑树本身就是一颗二叉查找树,将节点插入后,该树仍然是一颗二叉查找树。此外,无论是左旋还是右旋,若旋转之前这棵树是二叉查找树,旋转之后它一定还是二叉查找树。这也就意味着,任何的旋转和重新着色操作,都不会改变它仍然是一颗二叉查找树的事实。道理很简单,添加或删除红黑树中的节点之后,红黑树就发生了变化,可能不满足红黑树的5条性质,也就不再是一颗红黑树了,而是一颗普通的树。但当新插入节点的双亲节点颜色为红色时,就违反了性质3不能有连在一起的红色节点,此时需要对红黑树分情况来讨论了。,因而是接近平衡的。

2023-06-27 21:38:18 253

原创 函数可重入与不可重入理解

一个程序的运行,可能存在多个执行流程(比如信号单元这里涉及到俩个:main主控流程、信号处理流程,或者是在线程之间也能出现)一个函数在多个执行流程中重入后,并不会产生一些异常或者预期之外的情况,无论怎么重入都不会出现数据二义问题。一个函数在多个执行流程中重入之后,可能会产生一些数据二义性,导致预期之外的结果,有可能造成数据二义问题。修饰变量后,cpu每次访问变量数据,都需要从内存中去获取,防止编译器过度优化。如果一个函数同时存在多个执行流程进入执行,就叫做函数的重入。:修饰全局变量,函数改变作用域。

2023-05-30 15:09:26 72

原创 C++:map和set

set 是一个Key模型的搜索二叉树 #include<set>

2023-05-22 13:58:15 104

原创 C++多态详解

在虚函数的后面写上 = 0 ,则这个函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。派生类继承后也不能实例化出对象,只有重写纯虚函数,派生 类才能实例化出对象。纯虚函数规范了派生类必须重写,另外纯虚函数更体现出了接口继承。class Carpublic:public:cout << "Benz-舒适" << endl;public:cout << "BMW-操控" << endl;

2023-05-04 14:45:05 50

原创 C++继承知识点梳理

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。

2023-05-04 10:21:14 58

原创 Linux系统文件I/O

文件描述符就是从0开始的正整数。当我们打开文件时,操作系统在内存中要创建相应的数据结构来描述目标文件,于是就有了file结构体,用来表示一个已经打开的文件对象。重定向将一个文件描述符所对应fd_array数组当中的元素所指的struct file*的内容更改为另外一个文件信息,意味着当前文件描述符所对应的struct file指向的文件被另外一个文件替代了。此新的文件描述符和参数oldfd所指的是同一个文件,共享所有的锁定、读写位置和各项权限。1. > 清空重定向,清空文件之间的内容,在重定向到文件中。

2023-04-23 11:06:14 48

原创 Linux之进程的创建、终止和等待

fork 函数能够从已存在进程中创建一个新进程,新进程为子进程,而原进程为父进程。进程调用 fork 函数后,操作系统会做一下的事情:1.创建子进程,操作系统需要为子进程分配新的内核数据结构和内存块2.拷贝父进程的虚拟地址空间,但映射到物理内存时采用写时拷贝3.共享父进程fork之后的代码,而数据分离(代码是只读的,代码共享并不影响进程的独立性)4.添加子进程到系统进程列表中5.fork返回,开始由调度器调度。

2023-04-03 15:13:05 162

原创 C++基础知识3

5. 静态成员也是类的成员,受public、protected、private 访问限定符的限制。声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。3. 类静态成员即可用 类名::静态成员 或者 对象.静态成员 来访问。1.友元函数可访问类的私有和保护成员,但不是类的成员函数。

2023-03-16 09:55:15 39

原创 C++基础知识2

2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错,C++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其。4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐。3.用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义。:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定。返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。

2023-03-15 14:35:50 47

原创 C++基础知识1

this指针是类中成员函数的一个隐藏形参,哪个类对象调用成员函数,this指针就指向谁。C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问。内置类型就是语言提供的数据类型,如:int/char...,自定义类型就是我们使用class/struct/union等自己定义的类型,看看下面的程序,就会发现编译器生成默认的构造函数会对自定类型成员_t调用的它的默认成员函数。

2023-03-10 14:16:07 42

原创 Linux调试器gdb的使用,makefile及进度条

makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具(m大小写均可),makefile是一个文件,两个搭配使用,完成项目自动化构建。图中第一行表示文件test依赖于test.c而存在,第二行表示用test与test.c的依赖关系,即test通过何指令由test.c生成。规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂。

2023-03-08 10:16:22 145

原创 冒泡排序、插入排序、希尔排序、选择排序、堆排序、快速排序六大排序详解

思路:左右相邻的两个数互相比较,大的交换到序列后边,每次遍历排出剩余的最大的数。如下图所示时间复杂度:O(空间复杂度:O(1)

2023-03-06 20:18:01 412 3

原创 Linux权限认识

介绍Linux操作系统用户和文件的权限。

2023-02-12 21:16:45 107

原创 栈和队列的实现

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。,因为如果使用数组的结构,出队列在数 组头上出数据,效率会比较低。以下是栈的C语言实现代码。出栈:栈的删除操作叫做出栈。

2022-12-19 20:06:25 57

原创 带头双向循环链表

带头双向循环链表

2022-12-04 14:58:35 154

原创 C语言预处理指令

C语言源文件要经过编译、链接才能生成可执行程序:编译会将源文件(.c文件)转换为目标文件。对于VC/VS,目标文件后缀为.obj;对于GCC,目标文件后缀为.o。编译是针对单个源文件的,一次编译操作只能编译一个源文件,如果程序中有多个源文件,就需要多次编译操作。链接是针对多个文件的,它会将编译生成的多个目标文件以及系统中的库、组件等合并成一个可执行程序。在编译之前对源文件进行简单加工的过程,就称为预处理(即预先处理、提前处理)。

2022-11-04 18:55:55 250

原创 C语言文件处理

这就涉及到了数据持久化的问题,我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据 库等方式。使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化。每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件, 或者输出内容的文件。一个文件要有一个唯一的文件标识,以便用户识别和引用。

2022-11-01 15:33:58 62

原创 动态内存开辟(详解)

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

2022-10-29 14:41:39 96

原创 字符串和内存函数讲解

重点介绍处理字符和字符串的库函数的使用和注意事项

2022-10-19 14:12:12 56

原创 结构体内存对齐详解

结构体内存对齐详解

2022-10-17 11:16:10 115

原创 整型数据在内存中的运算过程

【代码】整型数据在内存中的运算过程。

2022-09-29 15:49:52 62

原创 C语言实现简易扫雷小游戏

【代码】C语言实现简易扫雷小游戏。

2022-09-23 17:23:10 781

原创 C语言实现三子棋小游戏

菜单+棋盘初始化函数+棋盘打印函数。玩家下棋和电脑下棋函数为。胜利条件的判断函数为。

2022-09-23 17:15:58 737

原创 C语言抽签(抽奖)小程序

1.抽奖每输入一个参与者姓名需回车确认一下,再输入下一个人的名字,姓名最长50个字符。2.本抽奖每次固定20人参加,如需修改人数请在.c代码上修改num的数值。

2022-09-20 15:20:14 7338

原创 C语言一些小作业

4.打印1000-2000之间的闰年。3.计算100-200之间的素数。6.在屏幕上输出9*9乘法口诀表。1.求0-100之间的奇数。7.求10 个整数中最大值。5.求两个数的最大公约数。2.判断三个数的大小。

2022-09-07 10:19:20 382

原创 未来展望——学习规划

学习分享

2022-09-03 11:13:03 281 1

空空如也

空空如也

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

TA关注的人

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