自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ——红黑树

/ 节点的颜色// 红黑树节点的定义{}// 节点的左孩子// 节点的右孩子// 节点的双亲(红黑树需要旋转,为了实现简单给出该字段)// 节点的值域// 节点的颜色。

2024-05-02 22:31:47 51 2

原创 AVL 树

{}// 该节点的左孩子// 该节点的右孩子// 该节点的双亲T _data;int _bf;// 该节点的平衡因子。

2024-04-28 13:28:48 709 1

原创 C++ map和set的应用

set文档1. set是按照一定次序存储元素的容器;2. 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们;3. 在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序;4. set容器通过key访问单个元素的速度通常比unordered_set容器慢,但它们允许根据顺序对子集进行直接迭代;

2024-04-23 22:49:22 1902

原创 二叉搜索树

二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:·若它的左子树不为空,则左子树上所有节点的值都小于根节点的值·若它的右子树不为空,则右子树上所有节点的值都大于根节点的值·它的左右子树也分别为二叉搜索树。

2024-04-17 21:04:36 443 4

原创 C++ 多态

多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。比如Student继承了 Person。Person对象买票全价,Student对象买票半价。那么在继承中要构成多态还有两个条件:1. 必须通过基类的指针或者引用调用虚函数;2. 被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。

2024-04-17 18:41:34 1917 1

原创 C++ 继承

下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类。1. 很多人说C++语法复杂,其实多继承就是一个体现。有了多继承,就存在菱形继承,有了菱形继承就有菱形虚拟继承,底层实现就很复杂。所以一般不建议设计出多继承,一定不要设计出菱形继承。否则在复杂度及性能上都有问题。2. 多继承可以认为是C++的缺陷之一,很多后来的语言都没有多继承,如Java。3. 继承和组合public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。

2024-04-11 22:13:21 723 3

原创 C++——模板

一个程序(项目)由若干个源文件共同实现,而每个源文件单独编译生成目标文件,最后将所有目标文件链接起来形成单一的可执行文件的过程称为分离编译模式。【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生;2. 增强了代码的灵活性。【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长;2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2024-04-06 20:45:20 568 4

原创 STL——list

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2024-03-30 15:25:22 1748 2

原创 Linux---命令行参数

在运行可执行程序progress后,我们发现main函数的参数 int argc, char* argv[] 是用来存储命令行字符串和其下标的,在存储中,以空格作为分隔符将命令行字符串拆散成一个个字串,来存入argv这个字符串数组,数组中下标为0的(第一个)元素是程序的路径+名称,后面的元素是和该进程匹配的选项。运行同一个程序,加上不同的选项,就出现了不同的结果,这就说明:在同一个程序中,我们可以通过不同的选项,来执行同一个程序内的不同的功能,那这又有什么用呢?那它为什么要这么做?

2024-03-29 11:32:44 670 2

原创 Linux编辑器-vim使用

vi/vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且 还有一些新的特性在里面。例如语法加亮,可视化操作不仅可以在终端运行,也可以运行于x window、 mac os、 windows。

2024-03-23 19:03:26 953 1

原创 C++ 友元

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

2024-03-08 15:54:43 544 1

原创 Linux下基本指令

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

2024-03-02 19:49:50 910

原创 C++ 类的6个默认成员函数

如果一个类中什么成员都没有,简称为空类。空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。

2024-03-02 19:19:05 941

原创 C++ 内联函数

以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数体替换函数的 调用。查看方式:1. 在release模式下,查看编译器生成的汇编代码中是否存在call Add;2. 在debug模式下,需要对编译器进行设置,否则不会展开(因为debug模式下,编译器默认不 会对代码进行优化,以下给出vs2013的设置方式)

2024-03-01 10:54:26 336

原创 C++ 引用

引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。类型& 引用变量名(对象名) = 引用实体;注意:引用类型必须和引用实体是同种类型的。

2024-02-27 19:30:36 371

原创 C++缺省参数

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。

2024-02-27 18:40:40 335

原创 C++命名空间

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。注意:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中。

2024-02-24 20:15:11 351

原创 栈 和 队列

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。

2023-12-09 13:36:28 68 7

原创 顺序表和链表

线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使 用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的, 线性表在物理上存储时,通常以数组和链式结构的形式存储。

2023-12-09 12:27:19 163 4

原创 自定义类型:结构体

int x;int y;struct Stu//名字int age;int data;int b = 20;struct Stu s2 = { .age=18, .name="如花"};return 0;

2023-11-18 17:42:34 52 5

原创 数据在内存中的存储

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8 bit。

2023-11-17 20:48:55 122

原创 C语言库函数memcpy和memmove的模拟实现

在C语言中,memcpy 和 memmove 都是内存拷贝函数,它们俩的区别在于前者不能在一个数组类型上进行拷贝,而后者可以。在我们可以搜索到 memcpy 和 memmove 的参数和返回类型;从图片中我们可以看到,它们的参数和返回类型是相同的,那么区别就在于函数内部是如何实现的了。

2023-11-17 18:29:36 221 7

原创 C语言--测试和调试程序解释程序死循环

C语言为何会允许数组越界?这要归功于 C 信任程序员的原则。不检查边界,C 程序可以运行更快,编译器没必要捕获所有的下标错误,因为在程序运行之前,数组的下标值可能尚未确定。因此,为安全起见,编译器必须在运行时添加额外代码检查数组的每个下标值,这会降低程序的运行速度。C 相信程序员能编写出正确的代码,这样的程序运行速度更快。但并不是所有的程序员都能做到这一点,所以就出现了下标越界的问题。

2023-11-08 22:30:47 348 6

原创 C语言实现初阶扫雷

3.自定义初始化棋盘函数 :void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);2.在第五步排雷时,要实现统计输入坐标周围8个格子的地雷数,并打印在该坐标的位置,但是在排查棋盘边缘时,会出现数组越界访问,可能会导致程序崩溃,所以在创建棋盘时要使用 #define 宏定义。1.需要建立两个二维数组,一个用来存放地雷,一个给玩家展示(毕竟不能直接把有雷的棋盘给玩家看),这里依然可以使用。1.打印 show 数组。

2023-11-07 18:00:41 103 4

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

实现三子棋需要以下七个步骤:1.创建主函数和菜单2.使用字符数组创建棋盘;3.初始化化棋盘;4.打印棋盘;5.玩家下棋;6.电脑下棋;7.判断输赢。

2023-10-31 16:48:21 126 11

空空如也

空空如也

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

TA关注的人

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