![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 92
学习数据结构与算法,讲解
momo小菜pa
momo
展开
-
C++ 红黑树
RED,BLACK, _kv(kv){}private:成员变量:_left_right和_parent分别指向节点的左子节点、右子节点和父节点。_kv是一个pair<K, V>,存储节点的键和值。_col表示节点的颜色,可以是RED或BLACK。构造函数:接收一个pair<K, V>作为参数,初始化节点的键值对,并将节点的颜色初始化为RED。其他指针成员初始化为nullptr。原创 2024-05-26 12:03:19 · 1082 阅读 · 1 评论 -
C++ 实现AVL树
int _bf;// 平衡因子, _kv(kv), _bf(0){}模板参数K和V是两个类型参数,分别表示节点中键(Key)和值(Value)的类型。成员变量_left:指向左子节点的指针。_right:指向右子节点的指针。_parent:指向父节点的指针。注意,有些AVL树实现可能不包括此成员,但在某些情况下,如需要快速向上遍历树时,它是有用的。_kv:一个pair,包含键和值。_bf(平衡因子):用于表示该节点左子树和右子树的高度差。平衡因子的值可以是-1、0或1。原创 2024-05-21 09:11:49 · 783 阅读 · 8 评论 -
C++ 搜索二叉树
2. KV模型:每一个关键码key,都有与之对应的值Value,即<Key, Value>的键值对。1. K模型:K模型即只有key作为关键码,结构中只需要存储Key即可,关键码即为需要搜索到的值。实际每个节点,就是多了一个与key关联的值,搜索二叉树的实现逻辑只是与key有关。(即当前节点存在),就继续执行循环体。: 如果当前节点的键与给定的键相等,: 如果当前节点的键小于给定的键,: 如果当前节点的键大于给定的键,: 开始一个循环,只要。原创 2024-05-11 14:08:33 · 986 阅读 · 9 评论 -
计数排序&&归并排序(递归版本&&非递归版本)
计数排序是一种非比较排序算法,其核心思想是通过统计每个元素出现的次数,然后根据统计结果将元素按照顺序放置在输出数组中。以下是计数排序的逻辑思想(C语言版):1. 首先,遍历待排序的数组,找到数组中的最大值max,确定计数数组的大小为max+1。2. 创建一个大小为max+1的计数数组count,并初始化为0。3. 遍历待排序的数组,将每个元素的值作为计数数组count的索引,并将对应索引位置的值加1,表示该元素出现的次数。原创 2024-01-17 12:16:12 · 1039 阅读 · 6 评论 -
二叉树--基础OJ
题解:我们可以用递归的方法去做:如果两个树互为镜像(1.根节点的值相同,2.左子树的值与右子树的值对称)则为对称二叉树,我们先判断左右两棵树根节点的值,如果根节点的值相同,然后判断左右两棵树是否对称(左边树的左孩子是否等于右边树的右孩子,左边树的右孩子是否等于右边树的左孩子)我们依次递归,如果左右子树每个节点都满足以上两个条件,则为对称二叉树。注意:需要对空进行判断,如果两边对称位置都出现空则不影响结果,如果两边对称位置一边为空,另一边非空,则不为对称二叉树。原创 2023-12-12 10:06:48 · 319 阅读 · 5 评论 -
数据结构--二叉树
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。用先序,中序,后序的方式去直接创建二叉树,那么,知道先序的序列就用先序的序列去递归创建树,知道中序的序列就用中序的序列去递归创建树,知道后序的序列就用后序的序列去递归创建树。叶子节点的特征就是,左孩子右孩子都为空,则视为叶子节点,分别遍历两个子树的叶子节点,是叶子节点就返回1。原创 2023-12-08 10:39:38 · 490 阅读 · 16 评论 -
数据结构与算法--特殊的完全二叉树--堆,堆排序,利用堆解决topk的问题
本章的目标是学习树的概念及结构,二叉树的概念及结构,最后会用代码实现堆,如果你十分熟悉树和二叉树的概念和性质你可以直接跳到堆的部分。堆是一类特殊的二叉树,其中每个节点的值都大于或等于其子节点的值。这种属性称为堆属性。原创 2023-11-29 18:09:47 · 234 阅读 · 13 评论 -
队列OJ--循环队列
这时(obj->back-1+obj->k+1)%(obj->k+1)我们可以这样写,加上一个(k+1),就可以解决back为0 的情况了。入队需要注意:首先要判满,然后插入数据,最后还要考虑如果back下标如果到尾,还要将back重置为0,这里我们也可以用到取模的方法,back小于k+1back值不变back=k+1 back=k+1,back重置为0。为空的情况我们是很容易想到的,此时我们定义两个指针,front(控制出队)和back(控制入队),如果front等于back那我们就认为数据为空。原创 2023-11-21 11:03:32 · 157 阅读 · 19 评论 -
数据结构--栈与队列
前面我们已经学习了顺序表和链表,今天我们来学习栈与队列,这两种结构也属于线性表,实际上就是顺序表和链表结构的延展。原创 2023-11-16 14:20:08 · 367 阅读 · 13 评论 -
链表经典OJ题(链表回文结构,链表带环,链表的深拷贝)
前面我们学习了链表,现在我们来手撕几道经典链表OJ题目吧!!!原创 2023-11-12 14:08:27 · 328 阅读 · 10 评论 -
数据结构预算法--链表(单链表,双向链表)
6.pos节点前插入。原创 2023-11-11 12:40:54 · 358 阅读 · 9 评论 -
数据结构预算法--顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表一般可以分为:1. 静态顺序表:使用定长数组存储元素。2. 动态顺序表:使用动态开辟的数组存储。原创 2023-11-01 18:17:12 · 487 阅读 · 11 评论 -
数据结构与算法--复杂度
它定量描述了该算法的运行时间。在最坏的情况下,需要进行n-1次比较和交换,每次比较和交换的时间复杂度都为O(1),所以总的时间复杂度为O(n*(n-1)),即O(n^2)。该递归算法的时间复杂度为O(N),因为每次递归调用都会减少N的值,直到N为0为止,因此最多需要调用N次递归函数。BubbleSort的空间复杂度为O(1),因为它只需要常数级别的额外空间来存储一些中间变量,而不随输入规模n的增长而增长。这段代码的空间复杂度为O(n),因为它使用了一个大小为n+1的数组来存储斐波那契数列的前n项。原创 2023-10-28 14:39:29 · 193 阅读 · 12 评论