自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++递归思想

在 C++ 中,递归的实现方式通常是通过函数递归来实现。递归函数在处理问题时,会将问题分解为更小的子问题,然后再使用递归调用来解决这些子问题。在 C++ 中,递归函数通常包含两个部分:一个递归基(递归的退出条件),它是一个简单问题的解决方案,以及一个递归情况,它将问题分解为更小的子问题,然后使用递归调用来解决。递归经常应用于树形结构或者复杂的数据结构,在这些情况下,递归可以简化问题的解决过程。需要注意的是,递归函数的调用过程会占用栈空间,因此在实现递归时需要注意栈溢出的问题。

2023-06-03 13:29:11 153

原创 二叉树,二叉搜索树的创建(C++)

二叉树:每个结点最多有两个子树的结构二叉树的性质:1、二叉树的第i层上的节点数目最多为2{i-1},(i>=12、深度为k的二叉树至多有2{k}-1个结点(k>=1)3、包含n个结点的二叉树的高度至少为log2(n+1)4、在任意一颗二叉树中,若终端结点的个数为n0,度为2的节点数为n2,则n0=n2+1满二叉树每一层的节点都达到了最大值就是满二叉树完全二叉树在一颗二叉树中,只有下面的两层结点的度可以小于2并且最下面一层的叶子结点集中在靠左的位置上,这样的二叉树叫做完全二叉树。

2023-05-20 14:24:19 112

原创 数据结构与算法:哈希

线性探测再散列的方法就是当发生冲突时再换一个空的散列地址。一旦发生了冲突就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总是可以找到的。构造哈希函数最常用的方法发是除留余数法,用键值除以桶的总数,得到的余数就是存储的位置,3、如果输入的参数是一样的,那么输出的值一定是相同的,没有任何的随机成分。当用第一个哈希函数发生哈希冲突时,就换一个哈希函数,知道没有冲突为止。哈希表的本质上是一个数组,它的底层实现是使用数组实现的。通过哈希函数的方法造成的不同的输入却相同的输出。三、哈希碰撞(哈希冲突)

2023-04-15 17:38:24 87

原创 C++纯虚函数和抽象类

如果父类中一个虚函数其自身的实现无意义。此时可以将虚函数定义为纯虚函数。拥有至少一个纯虚函数的类是抽象类(纯虚类)。纯虚类不能直接创建对象。子类只有重写了所有的虚函数后才能创建子类对象。包含纯虚函数的类叫做抽象类。抽象类是不允许实例化的。也就是说抽象类不能创建对象,其子类必须重写纯虚函数子类才能被实例化。“一个普通的虚函数在虚函数表中其函数指针就是一个有意义的值,如果是一个纯虚函数,那么,在虚函数表中,其函数指针的值就是。纯虚函数就是没有函数体,同时在定义的时候,其函数名后面要加上”

2023-04-10 19:35:29 81

原创 C++拷贝构造函数

也就是说使用已经存在的对象初始化另一个新的对象,赋值运算符是将一个对象的值赋值给另一个已经存在的对象,调用的是拷贝构造函数还是赋值运算符,主要看是否有新的对象产生。3、如果拷贝构造函数的参数是值传递的话,在初始化拷贝构造函数的参数时就会用实参去初始化一个新的对象(形参),进而会继续调用构造函数,继续初始化形参,因此会形成无限递归。用一个已经存在的对象去创建一个新的对象时,会调用拷贝构造函数,拷贝构造函数是把对象当作参数掺入,利用传入的对象生成一个新的对象,而赋值运算符是将对象的值赋值给一个已经存在的实例。

2023-04-09 17:29:19 136

原创 C++析构函数

析构函数是作用于对象的销毁工作,清空对象所占有的堆区内存析构函数实在释放对象的时候自动调用,栈区对象自动释放,堆区对象需要手动释放delete才会调用析构函数。没实现析构函数的时候,编译器会自动实现默认的析构函数,里面什么也不做。· 编译器在对象销毁前会自动调用析构函数,不需要手动调用。· 析构函数不可以有参数,因此不可以发生重载。· 函数名称与类名相同,但是前面要有~· 没有返回值 ~类名(){}

2023-04-07 17:46:40 167

原创 C++构造函数

对象初始化时强制执行构造函数,如果没有自己实现构造函数,编译器会提供默认的构造函数。当我们使用new时,会先使用malloc申请一块堆区空间,然后调用构造函数为申请的空间赋值。构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个成员都有一个合适的初始值,并且在对象的生命周期内只会调用一次。(程序员没有定义),编译器会自动生成一个默认的。· 编译器在创建对象时自动调用对应的构造函数。:主要完成对象中资源的清理工作。:主要完成对象的初始化工作。类的六个默认的成员函数。

2023-04-04 18:38:05 54

原创 函数重载,函数参数默认值

答案:在编译.c文件的时候,只会给函数进行简单的重命名;所以加入两个函数名相同的函数在编译之后的函数名字照样相同;’后边是函数名“@@YA”表示参数表开始,后边的3个字符分别表示返回值类型,两个参数类型。在函数声明或函数定义的时候直接给形参赋值,这样在函数调用的时候不需要给形参传值,会使用它的默认值。答案:在.cpp文件中,虽然两个函数名一样,但是他们在符号表中生成的名称不一样。由于在.cpp文件中两个函数在符号表中的名称不一样,所以是可以编译通过的。(3)函数重载是一种静态多态;功能相似的函数名的数量,

2023-03-31 15:47:24 228

原创 C++多态

为了指定对象的虚表,对象内部包含了一个虚表的指针,来指向自己所使用的虚表,为了让每个包含虚表的类的对象都拥有一个虚表指针,编译器在类中添加了一个指针,*_vptr,来指向虚表。# 类C继承于类B,故类C可以调用类B的函数,但由于类C重写了C::vfunc2()函数,故Cvtbl的两个指针分别指向B::vfunc1()(指向继承的最近的一个类的函数)和C::vfunc2()。上表指出,一个继承类的基类如果包含虚函数,那这个继承类也拥有自己的虚表,故这个继承类的对象也包含一个虚表指针,用来指向它的虚表。

2023-03-30 18:07:01 52

原创 C++继承

继承允许我们一句另一个类来定义一个新的类,这样做到达了重用代码,和提高执行率的效果。当创建一个类时,不需要重新编写的成员变量和成员函数,只需指定新建的类继承了一个已有的类即可。这个已有的类称之为基类(父类),新建的类称之为派生类(子类)一个类可以继承多个父类,它可以从多个基类继承数据和函数。我们使用一个类派生列表来指定有哪些基类代码如下。如上图:子类中包含了父类中的两个函数eat()和fun()以及成员函数a。

2023-03-25 18:32:02 58 1

原创 C++类和对象: 封装

创建一个简单的类class关键字+类的名字public://属性int age;//行为void fun()cout << "跑步" << endl;sun.fun();return 0;

2023-03-24 18:41:09 79 1

原创 C++中的引用与const

C语言中的const修饰的变量不能当作常量使用,但是C++中的const修饰的变量可以当作常量使用。被const修饰的变量必须其引用也要被const修饰。就是为已经存在的变量取个别名,引用和引用的变量。引用在定义是必须初始化且不能被初始化为NULL。· 引用在定义时必须被初始化,指针没有要求。· 引用不能改变引用关系,而指针随意。· 没有NULL引用,有NULL指针。· 引用++和指针++表达的含义相同。引用实体和引用类型必须为同种类型。类型 &引用变量名称=变量名称。· 有多级指针,没有多级引用。

2023-03-23 21:14:41 49

原创 如何验证一棵树是否为二叉搜索树

二叉查找树(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的: 若它的左子树不空,则左子树上所有结点的值均小于它的根节点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉查找树。清楚定义后,我们需要选择一种遍历二叉树的方法,因为中序遍历二叉搜索树得到的结果是从小到大的,我们就可以根据中序遍历的特点去判断一棵树是否为二叉搜索树。遍历到每一个结点的时候我们都要和前驱节点去比较大小,如果下一个结点小于等于前驱节点那么就直接返回false。

2022-12-08 21:49:45 467

原创 力扣剑指offer54.二叉搜索树的第k大的节点

数据结构与算法

2022-12-06 10:21:11 159

原创 寻找链表中倒数第k个结点?

寻找链表中倒数第k个结点?

2022-09-19 21:54:09 155 1

空空如也

空空如也

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

TA关注的人

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