自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL树的详解

AVL树的增加查找以及平衡因子介绍

2024-10-18 19:49:56 873

原创 二叉搜索树

替代节点的意思就是节点和R的两个结点的值交换,转而变成删除R结点,R结点符合情况2或情况3,可以直接删除。R(最右结点)或者N右子树的值最小结点R(最左结点)替代N,因为这两个结点中任意⼀个,放到N的。4.无法直接删除此结点,因为两个孩子无处安放,只能用替换法删除。2.把节点父亲的孩子节点直接此节点的右孩子,后删除此节点。3.把节点父亲的孩子节点直接此节点的左孩子,后删除此节点。1.将此节点的父亲节点的孩子置空,直接删除此节点。如下图,查找3,要找到1的右孩子的那个3返回。2.删除的节点左为空,右不为空。

2024-10-16 21:56:29 293

原创 优先级队列

建堆与优先级队列

2024-10-10 21:34:32 215

原创 c++虚函数

虚函数在C++中用于实现多态,虚函数就是为了通过基类访问派生类实现函数多样性的函数。虚函数在基类中定义一个未实现的函数,在函数前加virtual关键字public:.....private:....类似于上述中的func函数;在继承其的子类中可以对其进行重写。

2024-09-28 19:33:49 544 1

原创 排序算法(C语言)

原理:将最小值与最大值分别找出分别移到左右两侧。每次内循环都找到最大的数放入末尾。时间复杂度:O(n^2)以下是递归算法的代码。

2024-08-15 15:44:46 388

原创 List容器

resize改变有效元素的个数,多余元素用resize第二个参数补充,若无第二参数,则用默认构造;v.insert(v.begin()+n(所需插入位置下标),(插入数据));v.erase(v.begin()+n(所需删除位置下标));insert支持任意位置的插入,利用迭代器插入指定位置数据。l1.resize(n(改变后的长度),(构造的数));erase支持指定位置删除并返回下一位置迭代器。用于交换list数据。

2024-08-08 17:26:33 331

原创 vector容器与vector迭代器失效

3.vector空间增长size:获取数据个数capacity:获取空间容量大小empty:判空resize:改变数据sizereserve:改变capacity。

2024-07-30 18:37:57 428

原创 string类

1.用auto声明指针类型时,用auto和auto*没有任何区别,但用auto声明引用类型时则必须加&2.当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。3.auto不能作为函数的参数,可以做返回值,但是建议谨慎使用4.auto不能直接用来声明数组 string str:生成空字符串;string s(str):生成字符串为str拷贝复制;string s(str, strbegin,strlen):将字符串s

2024-07-28 19:51:30 222

原创 c++模板简介

通过实参a1将T推演为int,通过实参d1将T推演为double类型,但模板参数列表中只有。类模板实例化与函数模板实例化不同,类模板实例化需要在类模板名字后跟<>,然后将实例化的。函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生。该语句不能通过编译,因为在编译期间,当编译器看到该实例化时,需要推演其实参类型。一个T,编译器无法确定此处到底该将T确定为int 或者 double类型而报错。类型放在<>中即可,类模板名字不是真正的类,而实例化的结果才是真正的类。

2024-07-20 19:22:27 323

转载 C++内存管理

operator new与operator delete函数是系统提供的全局函数,new在底层调用operator new全局函数来申请空间,delete在底层通过operator delete全局函数来释放空间;operator new 实际也是通过malloc来申请空间,如果malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施就继续申请,否则就抛异常。operator delete 最终是通过free来释放空间的;

2024-07-19 13:48:56 559

原创 类和对象的了解

class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。定义在类中的函数默认为inline⽤类类型在物理内存中创建对象的过程,称为类实例化出对象。

2024-07-14 17:32:53 984

原创 c++入门基础概念

命名空间需要一个叫namespace的关键字,后跟命名空间的名字,再接{},{}内部为命名空间的成员,命名空间可以定义变量,函数以及类型命名空间本身是一个域(c++中有全局域,局部域,命名空间域和类域)命名空间只能定义在全局但可以嵌套使用。

2024-07-10 15:18:17 590

原创 二叉树基本概念

树是一种数据结构,由n(n>=0)个有限节点组成一个具有层次关系的集合。形似一个倒挂的树,根在上叶子在下。有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1

2024-05-30 15:56:02 867

原创 带环单链表的追击问题(快慢指针)

可以看出是否能够相遇需要看fast,slow都进入循环后的距离,还需要看他们的速度差,共同决定了fast与slow1能否相遇。解决这个问题的思路其一是快慢指针,本文主要讲快慢指针的解决问题。2.n是奇数,速度为奇数,如果距离之差可以减到偶数,则可以相遇。代码如上,可以判断链表是否带环,如果带环快慢指针必定会相遇。判断一个单链表是否为环(如下图的环)1.n是偶数,则很快就可以追上。减成奇数则不会相遇。

2024-05-03 13:46:05 334 2

原创 文件和文件操作

打开文件操作需要分成读和写,一个是打开文件并读取,一个是打开文件并写入,功能不同具体操作需根据情况而定。fopen与fclose被ascall规定为打开文件与关闭文件的函数。rewind让⽂件指针的位置回到⽂件的起始位置。c程序针对输入输出操作都是通过流来进行的。ftell可以返回文件指针对起始位置偏移量。根据⽂件指针的位置和偏移量来定位⽂件指针。fseek可以返回文件指针的位置偏移量。

2024-03-31 16:17:31 300 1

原创 结构体内存对齐

还有一点.在传参结构体时,最好传输结构体的指针,因为地址,因为传输结构体所占用空间会很大会对性能造成损耗。3.结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的。4.如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构。体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。-Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩。对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。pragma可以更改对齐数。

2024-03-23 13:59:13 321 1

原创 整数和浮点数在内存中存储

⽐如:0.5的⼆进制形式为0.1,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其。阶码为-1+127(中间值)=126,表⽰为01111110,⽽尾数1.0去掉整数部分为0,补⻬0到23位。这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值减去127(或1023),得到真实值,再将有效。⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2。那么,按照上⾯V的格式,可以得出S=0,M=1.01,E=2。反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

2024-03-18 17:13:27 711

原创 c语言内存函数

作用:函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。作用:与memcpy类似,但和memcpy的差别就是memmove函数处理的源内存块和⽬标内存块是可以重叠的。memset是⽤来设置内存的,将内存中的值以字节为单位设置成想要的内容。⽐较从ptr1和ptr2指针指向的位置开始,向后的num个字节。

2024-03-15 21:09:04 380 2

原创 初始与深入指针

在学习c语言的过程中,指针有着举足轻重的地位,并作为能否学好这门语言的关键。

2024-03-15 13:33:32 720

原创 寻找单身狗II

思路:可以将上述例子中十个数分为两组数列,且5,6,不在同一个数列中,分为两组数后可以利用操作符"^",来将相同的数变为0,最后分别打印出两组数,就可找出单身狗。有了这个思路,我们便可将数组中的数字分别右移k位与0比较,并将他放进不同的数列中,而且可以将相同的数放在一起,5,6不同的数也可以分离;因为3是5,6异或得到,3的二进制为0011,则其中的两个1分别来自5,6;而这个3是通过上述10个数5,6得到的便可利用此点将5,6分离。有数组的元素是:1,2,3,4,5,1,2,3,4,6。

2024-02-03 11:44:37 791

原创 扫雷代码实践

然后在成功排雷的情况下计算此坐标周围雷的数量,利用字符大小减去字符0后的数字便是该数字的概念,算数周围的雷数,并显示在棋盘上。棋盘需要打印9*9大小,然后在探测周围雷的数量时,需要边界,则将数组定义为11*11。下一步便是打印棋盘,此时game,h的作用便体现出来了,定义一个game函数。最后关键步骤便是排雷,定义win的胜利条件和遇到重复坐标时的选择。然后在game.h中声明函数以连接主函数与game中的函数。布置雷之前需要定义雷的数量,以免雷的数量比棋盘大。由第一步分析,需要一个开始的菜单,代码如上。

2023-12-20 22:10:24 362

原创 分支与循环

While与do while差别是do while循环至少一次,for循环更加便捷,适用范围更大。switch在多选项的时候使用,同时也许使用break 与default。括号中则为条件(在判断中==为判断而=为赋值)分为do while. while for。if语句需要条件判断if()

2023-12-02 20:25:53 372

空空如也

空空如也

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

TA关注的人

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