自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手撕AVL树

VAL树是一种高度自动平衡的二叉搜索树,它具有稳定的二叉树造型,对于普通搜索二叉树而言,如果遇到了有序的数据,它就会变成一遍到,形同链表的造型,对搜索效率的损伤特别大,而VAL树的自动平衡会调整结构,使二叉树达到高度平衡的造型,让搜索效率大大提高VAL树的特点。

2023-11-18 15:33:11 58 1

原创 C++中的模板

优点模板复用了代码,节省资源,更快的迭代开发增强了代码的灵活性缺点模板会导致代码膨胀问题,也会导致编译时间变长。出现模板编译错误时,错误信息非常凌乱,不易定位错误。

2023-11-04 21:15:26 58 1

原创 优先队列——priority_queue

我们之前提到优先队列模板参数中,需要传输比较方法,但模板参数只能传输一个类型,不能传递函数,这里就需要用到仿函数所谓的仿函数,就是模拟函数,它是利用模板类和重载符合运算符来实现的,具体看代码class 类名返回类型 operator()(参数列表)函数体;这就是一个仿函数的基本书写形式,用模板类是使其更加灵活,能够处理更多的数据类型,平常定义的时候,我们需要根据想要的功能,来书写函数体,调用的时候直接创建一个类对象类对象(参数列表)这就是仿函数的调用形式。

2023-11-01 22:31:04 102 1

原创 list的实现

list是stl中的一个容器,它是一个带头双向循环链表的线性结构,有头插,尾插等一系列操作,同时,也保存了迭代器的运用,但因为它存储的数据是指向一个空间的指针,实现起来十分繁琐。

2023-10-31 08:56:05 67 1

原创 Vector相关函数及其实现

我们选取其中最常用的来进行相关介绍与实现最朴素的vector默认构造函数,形参是一个模板引用变量,可以是任何类型的变量,如int,char等内置类型,也可以是自定义类型,它给了一个缺省值allocator_type(),是一个无参的默认构造函数,我们可能以为只有自定义类型才有构造函数,但其实内置类型也有,所以此处放置内置类型变量也是可以的具体使用具体使用代码实现这两个都是vector的代码实现,区别在于第二个中n的数据类型为int,是为了迎合一些特殊情况而另外建立的重载构造函数。

2023-10-25 22:52:49 93 1

原创 翻转二叉树

这就是翻转二叉树的代码实现,它是将问题分为左子树翻转和右子树翻转,值得注意的是,因为需要交换左右子树,如果先改变左子树,那么右子树的递归就会缺少形参,因为你的左子树已经改变了,故需要将左子树的值先保存下来,左子树改变了,用保存原本左子树的值的变量去做右子树递归的形参。翻转链表很简单,基本方法是保持根节点不动,交换它的左右子树,同时,左右子树的左右子树在进行交换。

2023-10-24 08:36:18 39

原创 二叉树的前序遍历

3.先保存本节点,在用函数去处理左子树与右子树,进入函数后,左右子树也是相同的操作,都是先将自己当根节点处理,在去处理左右子树,这样就达到了根 左子树 右子树的效果,遇到空节点直接返回上一层函数。1.returnSize作为下标传过去,因为是递归函数,充当数组的下标,故需要变化,所以是地址传递。同时,左子树也是根,也有左右子树,右子树也是如此,故可以分为存储根,子问题为存储左子树,存储右子树。通过将二叉树保存的数组存储在数组中的方式遍历二叉树,顺序为前序,2.arr数组用来保存二叉树每个节点的值。

2023-10-23 22:18:55 34

原创 空间复杂度

每次调用一次函数,就会进行一次压栈,开辟一处新的空间,虽然在使用完之后,这些空间会被回首销毁,但空间复杂度计算的是当空间被占用最多时候的大小,实例3中,每次Fac函数都会在调用一次Fac函数,也就是说,每次调用Fac函数,都会额外占用一次空间,一共调用n次,即额外占用n个空间,所以O(n)。空间复杂度的计算可以简化为额外占用空间的计算,在简化可以理解为创建变量的个数,故在上述函数中,仅仅创建了exchange这一个变量,所以函数的空间复杂度为O(1)。实例4的空间复杂度为O(n),具体怎么计算呢?

2023-04-14 16:20:16 78

原创 时间复杂度

时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是我们需要每个算法都上机测试吗?是可以都上机测试,但是这很麻烦,所以才有了时间复杂度这个分析方式。一个算法所花费的时间与其中语句的执行次数成正比例,算法中的基本操作的执行次数,为算法的时间复杂度。总结:求算法的时间复杂度,就是求它的基本操作执行次数。

2023-04-10 20:04:52 183

原创 二分查找解析

(3)结尾:跳出这个循环,一自然就是找到我们想要数组元素,这时候我们可以用break语句打破循环,二是不断折半,折半到最后一个元素,仍然没有找到我们的答案,这是最后一次循环,此时左边界已经等于右边界了,代表数组元素已经排查完了,结束了,左边界加1,大于右边界,或者右边减去一,小于左边界,故得,二是左边界大于右边界,代表数组已经找完了,仍没有找到答案。(2)流程:用左右边界求出中间值,这样就求得中间下标,通过中间下标,我们可以找到数组中间元素,再用这个元素去和我们查找的数据去进行大小对比。

2023-04-10 00:03:10 124

原创 文件操作中的随机读写

介绍完文件的顺序读写,它是按照规定的顺序一个一个往下读的,之前读的数据无法再次读取,而有些时候,我们又需要原来的数据完成一些事情,需要返回去读取原来的数据,这时候就需要文件的随机读写。

2023-04-06 16:52:19 131

原创 文件操作解析

磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。2.1程序文件包括源程序文件(后缀为.c目标文件(windows环境后缀为.obj可执行程序(windows环境后缀为.exe2.2数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。文件指针缓冲文件系统中,关键的概念是文件类型指针,简称文件指针。

2023-04-06 15:17:43 188

原创 动态内存管理小记

为什么存在动态内存分配为什么存在动态内存分配当前我们已知的在内存中开辟空间的方法有他们在开辟的时候就被固定了大小,无法改变,而有些时候,我们需要扩大容量,例如数组,我们开始定义的大小满足不了后来的需求,而为了满足需求,我们需要扩大容量,但上述方法无法改变容量。他们开辟空间大小是固定的,无法改变。这时候只能创建另一个变量,并使其有更大的容量,再将原来的数据拷贝进新变量,但很麻烦,占用了空间。这时候,我们可以尝试动态内存开辟。动态内存开辟静态内存开辟一般是直接开辟,不需要辅助函数。

2023-03-23 14:45:59 48

原创 全局变量和局部变量小记

全局变量作用范围是整个文件,它有文件作用域,局部变量作用范围是函数内部,就是{}内部,它是块作用域,如果两个同名变量分别拥有文件作用域和块作用域,那么只有拥有块作用域的变量是可见的,而拥有文件作用域的变量会被隐藏,不可见,这就是为什么,在函数内部,直接打印x,其值会是800,而不是700。如图,定义在函数外的变量就是全局变量,而定义在函数里面的,就是局部变量,这里的函数外和函数内,不仅仅是指main,而是所有函数。由图可知,全局变量的作用范围是整个程序,而局部边量作用范围是函数内部,也就是{}内部。

2023-03-12 17:36:46 965

空空如也

空空如也

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

TA关注的人

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