- 博客(16)
- 收藏
- 关注
原创 红黑树的底层原理实现
4.对于每个结点,从该结点到其所有后代叶节点的简单路径上,均 包含相同数目的黑色节点。else //叔叔不存在或者存在且为黑。else //叔叔不存在或者存在且为黑。//存在不相等的黑色节点的数量。//叔叔存在且为红,变色即可。5.每个叶子结点都是黑色的(此处的叶子结点指的是空节点)//parent 的颜色是黑色,就结束了。3.如果一个节点是红色的,则它的两个孩子节点是黑色的。//存在连续的红色节点。AVL树:严格平衡因子。红黑树:近似平衡因子。
2024-05-17 23:54:27
549
原创 关于平衡二叉搜索树中的AVL树
1、AVL树是按照搜索树规则进行插入的2、更新插入节点的祖先节点的平衡因子(1)插入父亲的左边,父亲的平衡因子--(2)插入父亲的右边,父亲的平衡因子++(3)父亲的平衡因子 == 0,父亲所在的子树高度不变,不再继续往上更新,插入结束了(3)父亲的平衡因子 == 1 or -1,父亲所在的子树高度变了,继续往上更新(3)父亲的平衡因子 == 2 or -2,父亲所在的子树不平衡了,需要旋转处理了。
2024-05-12 01:27:40
593
原创 map、set
map<string,string> dict2 = {{"left","左边"},{"right","右边"},{"string","字符串"}};dict.insert(pair<string,string>("left","左边"));pair<string,string> kv2 = {"string","字符串"};map<string,string> kv1("sort","排序");dict.insert(make_pair("right","右边"));sort是快排,快排不稳定。
2024-04-29 14:16:30
229
原创 二叉搜索树
else if(cur->_right == nullptr)//右为空。else if(cur->_right == nullptr)//右为空。if(cur->_left == nullptr)//左为空。if(cur->_left == nullptr)//左为空。cout << "查无此单词" << endl;//替换法:找一个节点替代你,左子树最大节点或者右子树最小节点。//替换法:找一个节点替代你,左子树最大节点或者右子树最小节点。private: //套一层壳。
2024-04-28 13:14:12
284
2
原创 理解string
if(len == npos || pos > = _size - len) //【写成pos + len>= _size】有溢出风险。//:_str(new char [strlen(str)+1]) //这里strlen调用了三次。【智能指针】引用计数:析构时检查引用计数,如果减完以后计数 == 0 代表当前是最后一个管理资源的对象,那就释放。发生写时拷贝:检查引用计数,如果 == 1,说明资源是自己独占的,不用拷贝。
2024-03-25 21:22:40
601
原创 数据结构-排序
i += gap) //每组进行的循环,间隔为gap。if (tmp < a[end]) // 如果 tmp 小于前面的元素,则将前面的元素后移。if (left >= right) // 左右边界相等或左边界大于右边界,直接返回。//把现在的数标记为mini。//把现在的数标记为maxi。if (maxi == begin) //这里做出判断是为了防止。while (end >= 0) // 从当前元素开始向前遍历。// [begin, mid][mid+1, end]归并。
2024-01-17 20:15:24
355
1
原创 数据结构第三课:链表
相对于顺序表这种存放这连续内存地址的而言,每次都需要扩容然而扩容又有很多缺点:1、如果扩容扩少了,就需要多次扩容2、如果扩容扩多了,那又会造成空间浪费这个时候我们就要想到链表,因为链表和顺序表不一样链表是由一个个不同的空间组成的,他们在物理结构上是不连续的,但是在逻辑结构上是连续的由于单项无头结点不循环链表最难,所以我们从这个开始讲起。
2023-11-20 23:54:43
22
1
原创 关于c语言的基础内容做一个大概的知识框架构建
自定义类型就是自己定义用来方便表示的类型:有结构体、枚举、联合体等__FILE__ //进行编译的源文件__LINE__ //文件当前的行号__DATE__ //文件被编译的日期__TIME__ //文件被编译的时间__STDC__ //如果编译器遵循ANSI C,其值为1,否则为未定义。
2023-11-10 19:37:09
62
1
原创 数据结构——时间复杂度和空间复杂度
时间复杂度的定义:算数的复杂度是一个函数,它定量描述了算法的运行时间一个算法执行所花费的时间,从理论上是不能够算出来的,只有你在机器上跑出来,才可以知道。
2023-10-27 20:54:10
26
1
原创 【无标题】
if (sum + tot > target) { //如果sum + tot > target,说明当前的值已经超过了i的平方,因此退出循环。int punishmentNumber(int n) { //函数punishmentNumber用来遍历1到n所有的数,找出符合条件的数,并将其平方的值加到res中返回。i*的十进制表示的字符串可以分割成若干连续子字符串,且这些子字符串对应的整数值之和等于i。// target表示i的值,即要判断是不是i的平方。
2023-10-26 00:13:13
33
原创 寻找十个数中的最大值
for (i = 0;i++)//循环增加,直到十个数。for (i = 1;i++)//循环增加,直到十个数。//先给数组一个定义。if (arr[i] > max)//找最大值。//定义最大值的初始化。//设置数组,有十个数。
2023-08-05 21:48:11
52
1
原创 关于分支和循环
goto是指在起点处输入“goto”,传送点输入"goto next",意味着跳到该处,但不建议多次使用,会导致整个程序进行乱码。continue是指跳过本次循环,进行下一次循环。break是指中止该循环,回到上一个循环。
2023-07-25 14:43:35
34
原创 一枚c语言小萌https://mp.csdn.net/edit新
我是一名来自高考完的大学生,虽然不太厉害,但我相信在四年内我会努力学习计算机,我目前准备在四年内努力备战考研,未来就业方向为Linux嵌入式开发工程师,每天都会抽出两小时的时间来学习,目前最想就业的一个公司是百度的嵌入式工程师。
2023-07-20 22:18:58
49
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人