自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 类和面向对象

/成员函数和成员变量组成class为定义类的关键字,classname为类的名字,{}中为类的主题,注意类定义结束时后面的分号不能省略。类中的内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。1.声明和定义全部放在类中,注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2.类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::class Datepublic:int _name;int _age;

2024-01-26 01:55:19 553 1

原创 C++入门

1.定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{} 中即为命名空间的成员。// tt是命名空间的名字,一般开发中是用项目名字做命名空间名。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型2.命名空间可以嵌套int a;int b;int c;int d;3.同一个命名空间允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间。

2024-01-21 06:18:58 800 1

原创 快速排序,归并排序

1.快速排序整体的综合性能和使用场景都是比较好的2.时间复杂度为O(N*logN)3.空间复杂度为O(logN)4.稳定性:不稳定性。

2024-01-20 01:25:23 790

原创 插入排序(直接插入,希尔)

的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。直接插入排序是一种简单的插入排序法,其基本思想是: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为 止,得到一个新的有序序列。先选定一个整数,把待排序文件中所有记录分成个 组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的 希尔排序的时间复杂度都不固定,按照。

2023-12-18 17:48:17 326

原创 二叉树例题分析

通过以上例题,重在抓住递归的结束条件,思路顺序大致为如果二叉树树的根节点为空或者访问到二叉树的空节点时返回true,然后找结束条件例如例一当左孩子不为空且左孩子的值不等于根节点的值时下才能返回false,接着再补全结束条件,一般结束条件都会和左右根节点是否为空有关,最后再考虑递归。

2023-12-12 01:20:56 30

原创 二叉树相关问题(遍历,计算节点数,判断是否为完全二叉树)

将此问题转换成左子树的第k-1层和右子树的k-1层,假设需要找的是第3层,访问第1层传参k的值为3,第二层则传参k=k-1,以此类推,当访问到第3层时k的值为1,也就是计算左右子树当k=1时的节点之和。因为层数是按照最高层数计算,则判断左右层数哪个更高,返回更高的子树加上当前节点所在的层数。通过递归遍历二叉树,当节点的值等于x时返回改节点的地址,如果不满足则创建两个变量分别接收左右子树的返回结果,递归结束的条件为当节点为NULL时。3.后序遍历:访问根节点的操作发生在遍历其左右子树之后,按照左右根的顺序。

2023-12-10 21:40:42 66 1

原创 向上向下调整建堆的区别和TopK问题

这是在原有的数组中建堆,for循环依次完成从第1个元素开始往后的所有数组元素的向上调整,将i赋值给child变量,并根据child求出其父亲节点的下标完成向上调整,每一个子节点如果满足所建的堆的条件并且子节点的下标不为0时则继续向上调整。从叶子节点的父节点开始循环,当子节点和父节点不满足堆的条件和子节点的下标小于数组元素个数时将继续向下调整。第h-1层有2^(h-2)个节点,需要向上调h-2次。第h层有2^(h-1)个节点,需要向上调h-1次。第h-1层有2^(h-2)个节点,需要向下调1次。

2023-12-04 21:12:29 24

原创 二叉树大小堆(顺序表)

现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统管理内存的一块区域分段。:一个1二叉树,如果每一个层的节点数都达到最大值,则这个二叉树就是满二叉树,也就是说,如果一个二叉树的层数为K,且节点总数是2^k-1,则它就是满二叉树。需要注意的是:完全二叉树有两个孩子节点,如果是在大堆中则需要找出两个孩子中较大的孩子与父亲节点做比较,如果是在小堆中则是找出较小的孩子做比较。如上图:B是A的孩子节点。

2023-11-20 18:57:59 61 1

原创 用栈实现队列,用队列实现栈以及循环队列

当出栈时需要先将不为空的队列的元素移动到另一条为空的队列中,当原本不为空的队列只剩一个元素时,该元素就是栈顶元素,将其删除即完成出栈。队头标记的修改和队尾的原理相同。循环队列的基本功能有:1.循环队列的初始化,2.循环队列的判空,3.循环队列的判满,4.循环队列的插入,5.循环队列的删除,6.获取队头元素,7.获取队尾元素,8.销毁循环队列。首先明确结构体循环队列中包含的成员,由于是循环队列,需要判断是否为空或者是否已满,所以需要队头队尾标记,数据域的指针变量,数据域是顺序表,还需要一个变量记录数组长度。

2023-11-10 19:12:46 64 1

原创 队列的实现

队列:只允许在一段进行插入数据操作,在另一端惊醒删除数据操作的特殊线性表。队列具有先进先出FIFO(First In First Out)的原则。队列也可以数组和链表的结构实现,使用链表结构更优一些,因为如果使用数组结构,出队列在数组头出数据,效率回比较低。分为三个文件实现:头文件,函数实现文件,测试文件。入队列:进行插入操作的一端称为队尾。出对点:进行删除操作的一端称为对头。

2023-11-06 16:29:16 19

原创 栈的实现及总结

栈是一种特殊的线性表,它只允许从固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循后进先出LIFO(Last In First Out)的原则。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优游戏额。因为数组在尾插尾删数据时的代价比较小。分为三个文件实现,头文件,函数实现文件和测试文件。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈,

2023-11-04 14:10:42 58 1

原创 顺序表和链表的区别

如果访问或修改的是顺序表,由于顺序表的物理地址是连续的并且将数据加载到高速缓存中是一段一段的加载,而不只是加载一个数据元素。比如说顺序表中存在一个数组arr[4]={1, 2, 3, 4},第一次想访问的是3,不在高速缓存中,于是将1加载到高速缓存中去,但是并不只是加载1,可能是一段1,2,3,4或者是1,2,3等等可能。如果是访问或者修改链表,由于链表申请的节点的物理地址不一定是连续的,所以在将其加载到高速缓存时可能需要一个节点加载一次,因此链表的缓存命中较低,访问修改的速度也相对较慢。

2023-11-04 13:58:25 22 1

原创 带头双链表增删查改实现

分为三个文件实现,头文件,函数实现文件,测试文件。

2023-11-03 18:09:57 23

原创 链表增删查改实现

2.带头双向循环链表:结构复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。虽然结构复杂,但是使用代码实现会发现结构带来很多优势,实现反而更简单。实际中更多是作为其它数据结构的子结构,如哈希桶,图的邻接表等等。1.从上图可以看出,链式结构在逻辑上是连续的,但是在物理上不一定连续。3.从堆上申请的空间,是按照一定的策略来分配的,两次申请的空间。分为三个文件头文件实现,头文件,函数实现文件,测试文件。2.现实中的节点一般都是从堆上申请出来的。,非顺序的存储结构,数据元素的。

2023-11-02 16:47:50 48

原创 链表OJ总结

在移除链表元素中用到尾插的思想;在反转链表时可以通过逆置各个结点指向或者时利用头插法实现;求链表中间节点可以通过快慢指针的方式去解决;倒数第k个节点则是让快指针先走k步然后再一起走的方法去求得结果;合并两个有序链表也是通过尾插思路解决;链表分割也是采用了尾插思想解决问题;链表得回文结构则是通过快慢指针先逆置中间节点之前得结点指向,然后从中间开始往两个方向遍历判断是否是回文结构;相交链表先求出两个链表的长度,让长的链表先走两链表长度之差的步数,再一起走,当走到同一个节点时则返回该节点;

2023-11-02 15:56:29 21

原创 顺序表总结

线性表是n个具有相同特性的数据元素的有限序列。线性是一种数据结构,常见的线性表又:顺序表,链表,栈,队列,字符串等。线性表在逻辑上是线性结构,也就是连续的一条线。但是物理结构并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表图例:以数组的形式存储。

2023-10-19 10:45:53 33

原创 时间,空间复杂度问题

注意:函数运行时所需要的栈空间(存储参数,局部变量,一些寄存器信息等)在编译期间已经确定好了的,此空间复杂度主要通过函数在运行时显式申请的额外空间来确定。斐波那契数列的递归实现非常简洁,但是它的时间开销和空间开销都非常大,所以,在上述代码的情况中斐波那契数列的递归调用并非是一个好的算法。时间复杂度的定义,算法的时间复杂度时一个函数,它描述了该算法的运行时间。第一种方法,创建一个新的数组,先将从n-k开始到第n个元素拷贝进取,再将第0个到第n-k个元素拷贝进去,用空间换时间。的所有整数,但其中缺了一个。

2023-10-18 01:39:38 27 1

空空如也

空空如也

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

TA关注的人

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