自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 N皇后问题(DFS解决)

N皇后

2024-04-14 19:19:26 414 22

原创 C++实现AVL树

经过了解二叉搜索树的性质之后,我们也发现了它极大的缺陷,如果数字基本上都是趋于有序的情况下,那么查找效率非常低下,时间复杂度为O(n),与顺序表的查找一样,因此我们引出了二叉平衡搜索树(AVL树),该树的优势在于能够保证根节点左右子树的高度差的绝对值小于等于1,这就很好保证了查找效率O(logn),如下图就是二叉平衡搜索树的样子。

2024-04-14 18:58:48 1052 8

原创 续二叉搜索树递归玩法

续二叉搜索树递归玩法。

2024-04-04 15:28:19 591 28

原创 C++实现二叉搜索树的增删查改(非递归玩法)

二叉搜索树(Binary Search Tree)又称二叉排序树(Binary Sort Tree),是一种特殊类型的二叉树,它所有的根节点大于左子树的节点,小于右子树的节点,对二叉搜索树进行中序遍历,即可得到有序的数列。二叉搜索树的时间复杂度由树的高度决定,其搜索、插入和删除的时间复杂度均为 O(log n),其中 n 是节点数。在最坏的情况下,仍然会有 O(n)的时间复杂度。二叉搜索树的时间复杂度由树的高度决定,其。查找非常简单按照流程找就行了。

2024-04-04 00:08:02 1221 23

原创 面向对象:多态

通俗来讲多态就是完成某一种行为,不同的对象会完成会产生不同的状态。比如买票,针对不同的人群有不同的购票机制,对于儿童来说怎么样,对于大学生来说怎么样,这就是不同人群产生的不同状态机制通过前面的虚拟继承我们得知在继承的父类前面加一个virtual就行了,那么虚函数也是如此,在普通函数前面加一个virtual就行了。

2024-03-30 23:42:05 696 25

原创 面向对象:继承

虚拟继承就是在类前面加一个virtual。

2024-03-29 12:25:14 1036 27

原创 双指针算法:三数之和

5.取nums[i]的相反数sum,判断sum和a[left]+a[right]的大小关系,如果sum大于a[left]+a[right],那么left++,小于的话就right–,同时要满足left

2024-03-23 23:02:24 475 13

原创 排序算法:归并排序(非递归)

细节图解:

2024-03-21 22:43:13 598 26

原创 排序算法:归并排序(递归)

【代码】排序算法:归并排序(递归)

2024-03-21 13:35:14 914 19

原创 排序算法:快速排序(非递归)

【代码】排序算法:快速排序(非递归)

2024-03-17 23:50:32 563 14

原创 string的模拟实现

【代码】string的模拟实现。

2024-03-17 18:36:11 1113 21

原创 矩阵中移动的最大次数

【代码】矩阵中移动的最大次数。

2024-03-17 09:50:52 583 8

原创 STL库中的string

erase、insert和replace都需要挪动数据,效率比较低下,能不用最好不用,而且还需要扩容。pos代表的是插入的位置(字符数组的下标),str表示插入的字符串。capacity扩容时是根据字符串有效字符的个数进行扩容的,空间比较小的时候不需要动态内存的开辟,相当于_ptr浪费掉了。空间大的时候需要动态内存的开辟,相当于_buf浪费掉了。返回的都是字符串的长度,平常时我们一般都用size。这里的append有多种类型的接口,但是一般。这里的成员函数size表示的是字符串的大小。

2024-03-15 23:38:26 933 24

原创 排序算法:快速排序(递归)

2.然后cur先向前走,如果大于key,那么继续向前走,prev,不向前走,如果小于key,那么prev和cur同时向前走(,定义right从数组下标为n-1的位置,从右向左找小于key的数,从最右边的数开始,如果。1.这里我们先把中间值定位数组中的首元素的值,设为key变量,2.定义left为从数组0下标开始找大于key的数,如果。1.首先定义一个前指针prev,和一个后指针cur。(也就是谁走到相等的位置,而那个人是停止的)引言:这里所说的快速排序有三种,第一种是。自创的,还有一种叫做。

2024-03-11 21:44:51 1239 9

原创 排序算法:希尔排序

希尔排序是一种先进行预排序(以达到接近于有序的状态),然后最后进行整体排序。

2024-03-10 23:56:18 522 5

原创 C++类和对象

/ 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

2024-03-10 19:21:40 1096 9

原创 内联函数|auto关键字|范围for的语法|指针空值

使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,大家可思考下为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】

2024-03-08 23:06:16 1115 10

原创 C++入门知识点

打开反汇编,里面有VS识别不同的Add函数,不同的Add函数里面调用的内容不一样,编译器通过这个进行识别不同的类型(call是函数调用的意思)如下图,Add函数里面的a和b都叫缺省参数,里面的参数都被赋值,这个叫全缺省,并且主函数中调用Add函数可以不用传参数。在不同的命名空间域中,里面的函数名,变量名都可以一样,因为他们限定在不同的空间作用域互不影响,所以不会产生冲突。函数重载也就是函数可以相同,但是参数的个数,参数的类型必须不同,不然就是同名函数这点与C语言判断方式不一样。

2024-03-08 00:49:16 1095 4

原创 排序算法:插入排序

也就是把数字从前,或者从最后开始比较然后插入到这个数的前面或者后面,从[0,end]区间插入。

2024-03-04 23:42:26 493 1

原创 二叉树的深度,求第k层的节点个数,二叉树的销毁,二叉树寻找值为x的节点

熟悉了前面的递归,销毁递归基本上是小菜一碟,从最下面的节点开始销毁。

2024-03-04 14:04:50 471 4

原创 二叉树叶节点个数,节点个数

节点的度:一个节点含有的子树的个数称为节点的度。叶节点或终端节点:度为0的节点称为叶节点。树的深度或高度:树中节点最大的层次称为度。节点的层次:从根开始为第一层,以此类推。树的度:一个树中最大节点的度为树的度。

2024-03-03 23:44:26 421 2

原创 二叉树的前序后序中序层序

用队列实现二叉树的层序,将二叉树的节点的指针存在队列中。引言:首先我们讲一下什么是二叉树的前序中序后序层序。与前序就把打印根节点放在递归左子树的下面了。首先我们创建几个节点,我这里的树的形状。前序:从 根 左子树 右子树访问。中序:从 左子树 根 右子树访问。后序:从 左子树 右子树 根访问。也就是一直递归左子树,直到为空树。等到根为空的时候就无法分解。

2024-03-03 21:20:21 824 2

原创 设计循环队列

因为这样容易判断队列是否为空,如果不指向下一个元素那么有一个元素的情况下rear和front的值相同,没有元素的情况下rear与front的值还是相同。这里的rear需要除以一个周期,因为我们开辟了k+1个空间,所以这里的rear对应的值为k,所以需要+1除以一个周期k+1才能回到最开始的位置。这种情况下rear-1为负数,所以我们需要回正,再者考虑其他正常情况,我们需要加上队列的一个周期k+1然后%(k+1)这里的rear必须是指向尾元素的下一个位置。取头很简单,重要的是取尾。1.没有元素的情况下。

2024-03-02 23:59:26 570 3

原创 栈和队列OJ题

题目分析: 栈的结构是后进先出,而队列的结构是先进先出,我们利用这个性质,可以把一个队列用于存数据,一个队列用于倒数据。题目要求我们要写这几个函数。

2024-03-02 08:50:53 315

原创 队列的结构概念和实现

队列和栈一样都可以用链表和数组实现,但是对于队列来说,链表更好,因为用数组在对头出数据的话效率太低。队列就是只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出。每一个节点的开辟用malloc就行,这点与数组不一样,数组是realloc扩容。如上图所示,第一个人先来,排在第一位就可以第一个走,也叫先进先出。链表的销毁需要一个一个节点的销毁,无法直接销毁。但是想要近来就只能排队在后面等候。如有错误请您指正批评!

2024-03-01 22:43:00 585 3

原创 栈的概念结构和实现

栈是一种特殊的线性表,只允许在固定的一端进行插入和删除操作。进行插入和删除的一段叫做栈顶,另一段叫做栈底压栈:插入数据出栈:删除数据压栈和出栈都是在栈顶。

2024-03-01 21:56:07 392 1

原创 N个数中寻找前K个最大的数

child++;先赞后看,养成习惯!!!码字不易,大家的支持就是我坚持下去的动力。关注我哦!如有错误请您指正批评!

2024-02-27 22:45:58 343 2

原创 二叉树和堆

1.二叉树是有限个节点的集合,根节点就是数组的第一个元素array[0],根节点下面分为左子树和右子树。树是一种非线性的的数据结构,逻辑结构就是一颗倒挂的树,物理结构是一个数组。然后再将交换之后的堆的尾元素剔除,然后重新调整堆,需要用到向下调整算法。这里的A为父亲,B和C为孩子,以此类推D,E,F是B的孩子。这里需要讲根节点和堆中最后一个元素交换位置。下面是向下调整算法:用于建大堆。小堆的父亲小于或等于孩子。大堆的父亲大于或等于孩子。如有错误请您指正批评!堆总是一颗完全二叉树。

2024-02-26 21:10:21 691 2

原创 C++日期类的实现

1.日期类的加减运算前言:在类和对象比较熟悉的情况下,我们我们就可以开始制作日期表了,实现日期类所包含的知识点有1.日期类的加减运算。

2024-01-02 01:09:38 752 2

原创 动态规划解决泰波那契数列,爬楼梯最小花费问题

做题之前我们需要先搞清楚解决动态规划的几个步骤。步骤3 4 5 都是对代码的细节处理,代码如下。1 状态表示,准备一个dp表。步骤1 状态表示,准备dp表。步骤2 状态转移方程表示。

2023-12-25 16:36:14 851 7

原创 链表移除节点和反转链表

(特殊情况,刚开始的头节点刚好等于val,这个时候就要把头节点向前挪动,前指针不挪动。我们需要前后指针对这个链表遍历,是val的节点就解除链表,不是的前后指针都走一步。把next的指向换一下位置就行了。

2023-12-24 21:49:36 564 2

原创 双向循环链表(附图解)

哨兵位就是相当于一个头节点,但是它只是起到一个链接作用,只负责链接。这里我就画随机插入和删除节点的图,其他的图都是类似就不做过多说明。随机插入需要和寻找相配合(在pos节点的前面插入)随机删除需要和寻找相配合(在pos节点的前面删除)

2023-12-18 16:22:14 617 2

原创 单链表详解(附图解,结尾附全部源码)

单链表的增删查改图解

2023-12-17 01:26:58 775 8

原创 C++入门(浅谈类和对象)

定义命名空间的目的是为了不与标识符的名称进行冲突,命名空间中可以定义函数,变量,类型。比如:这里的rand和strlens其实是函数,在命名空间中可以避免与全局作用域中的rand函数和strlens函数冲突,其次命名空间还可以嵌套定义同时一个命名空间定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中class bitint _life;char* next;int people;

2023-12-14 23:53:29 620 5

原创 数据结构之顺序表

顺序其实本质上就是一个数组,但是这个数组与结构体的空间不是连续在一起的。

2023-12-12 17:55:37 669 4

原创 计数排序详解

前言:这篇文章会给大家把计数排序安排的明明白白,详细的讲解计数排序的原理。

2023-12-10 19:03:27 1009 2

原创 柔性数组详解

用动态内存开辟的方式用,我们来结合昨天的动态内存管理设计一下程序。因为柔性数组只需要释放一次堆区内存,并且柔性数组不占用结构体内存。3 柔性数组的一种模拟实现(有缺陷,总的来说还是柔性数组好用)我们看到结构体的大小是8,所以柔性数组是不占空间的。1 柔性数组占不占结构体的空间呢?

2023-12-08 07:30:00 769 6

原创 动态内存管理(扫盲式讲解)

因为动态内存的开辟是在堆区里面的,可以释放,但是栈区的内存空间开辟是死的,无法释放。calloc与malloc只有一个区别,返回地址之前会把指针指向的内容全部初始化为0。首先你要学会开辟内存,然后在合适的条件下释放内存。(1)首先带大家了解动态内存的函数。1 为什么要有动态内存的开辟?2 怎么合理使用动态内存呢?指针、结构体、动态内存管理。

2023-12-07 13:28:30 685 5

原创 C语言实现植物大战僵尸(完整版)

实现这个游戏需要Easy_X这个在我前面一篇C++之番外篇爱心代码有程序教你怎么下载,大家可自行查看然后就是需要植物大战僵尸的素材和音乐,需要的可以在评论区留言

2023-12-06 01:11:51 79973 107

原创 直观清晰的带你了解KMP算法(超详细)

如果我们要找p[10]的下标呢?同上,先看p[9]的下标为3,对吧,我们看p[9]和p[3],发现根本不相等,怎么办呢?那么我们就从p[3]对应的next值入手,p[3]对应的next值为0,我们再回退到0,发现第p[0]与p[10]相等,这里p[0]的next的值就是对应的p[10]next值+1啦!我们先假设主串遍历到了第九个字符,但是我不知道第9个字符对应的next数组的数字,我 们的第8个字符的上标为8,然后对应的k是2,这里的p[2]是c,说明p[2]和p[8]相等啊,那么。

2023-12-05 00:18:58 1549 4

空空如也

空空如也

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

TA关注的人

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