C++
文章平均质量分 93
烟雨长虹,孤鹜齐飞
吃软不吃硬,嵌入式软件工程师
展开
-
【旋而又旋,旋妙之门】AVL 树的性质
我们插在 6 的左边,那么 6 的平衡因子减一,同理 7 的左子树高度加一,那么 7 的平衡因子减一,再继续向上 5 的右子树的最高高度并没有发生改变,所以 5 的平衡因子不发生改变。如果我们想要在 9 后面插入一个节点,那么 8 的平衡因子就会变为 2,此时的AVL树不平衡,根据平衡因子的绝对值必须小于等于二的原则,我们需要对树进行旋转。说明 parent 的平衡因子更新前是 1 / -1,插入节点插入在高的那边进一步加剧了 parent 所在的子树的不平衡,已经违反违规了,需要旋转处理。原创 2024-07-23 15:00:22 · 668 阅读 · 1 评论 -
C++ 继承篇
必须对继承而来的成员进行初始化直接通过初始化列表或者赋值的方式进行初始化调用父类构造函数进行初始化原创 2024-07-18 23:31:00 · 745 阅读 · 0 评论 -
基于搜索二叉树的停车收费管理系统
基于搜索二叉树的停车收费管理系统原创 2024-07-16 21:37:57 · 399 阅读 · 1 评论 -
数据结构-分析期末选择题考点(广义表)
广义表,又称列表,也是一种线性存储结构,既可以存储不可再分的元素,也可以存储广义表,记作:LS = (a1、a2、…、an),其中,LS 代表广义表的名称,an 表示广义表存储的数据,广义表中每个 ai 既可以代表单个元素,也可以代表另一个广义表。广义表表尾总是广义表,表头可能是也可能不是,例如广义表(a,b,c)表头为a不是,而广义表((a),b,c)表头为(a)是一个广义表。C = (a、(b、c、d)): 广义表 C 中有两个元素,原子 a 和子表 (b,c,d)原创 2024-06-30 11:29:31 · 921 阅读 · 0 评论 -
数据结构-分析期末选择题考点(图)
在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(1)每个顶点出现且只出现一次(2)若A在序列中排在B的前面,则在图中不存在从B到A的路径此拓扑排序的思想是:(1)从有向图中选取一个没有前驱的顶点,并输出之(2)从有向图中删去此顶点以及所有以它为尾的弧以上便是。原创 2024-06-29 18:24:34 · 983 阅读 · 0 评论 -
数据结构-分析期末选择题考点(串、数组)
承接上回,我们来复习串这一章的内容 ~说到,其实也不难,不过考点分布算是有点多。这里我们依旧是以题型进行分析:算法:一般考在哪个位置与匹配 (大概率)算法:给出一个串求其t 数组 (大概率) 串的以及(比如说特殊线性表,存储的数据元素是字符)给出一个求数量串的大概考点便是以上这些,我们再来聊一聊考数组的话,肯定是不会给你一维数组的,要考也是考二维,常以计算一个二维数组中的某个空间地址出题计算二维数组中的某个空间。原创 2024-06-28 21:41:44 · 833 阅读 · 0 评论 -
数据结构-分析期末选择题考点(排序)
再找比基准大的元素,找到后交换。(2)归并排序是一种二分排序算法,每次都需要给 n 个元素排序,排序的过程需要 logn,即树的高度,所以时间复杂度为 nlogn。快速排序以基准值为中心,对元素进行划分,这里 28 为基准值,则小于 28 的和大于 28 的进行交换,完成一次划分。排序的思想是每次选出最值,放在已排序序列的末尾,如果最值有多个,而选出的为最后一个最值,会导致相对位置发生变化。这种题就考的是对所有排序的模拟了,需要你了解所有排序的实现原理,属于偏难的题目,小概率会出。题型大概就是初始化建堆。原创 2024-06-26 18:08:54 · 878 阅读 · 2 评论 -
C语言数据结构-分析期末选择题考点(一)
p 已经没有 q 的联系方式了,但是题目还想让我们用原来的联系方式找到 q ,p 的现任是 s 啊,p 的 next 存的是 s 的联系方式,所以 B 也不能选(不知道我这么说,老铁们听不听得懂,应该很好理解吧)简单复习一下应该没什么问题,其次便是结构了,我们的队列也有顺序队列、链式队列,链式队列没什么考点,而顺序队列还可以考进入。A选项为头插,不需要遍历链表,B选项为尾插,也不需要遍历链表,C选项为头删,不需要遍历链表,只有D选项,为尾删,需要遍历单链表,找到尾节点的前一个节点。原创 2024-06-25 11:25:23 · 1448 阅读 · 0 评论 -
《C++程序设计》银行管理系统
莫思身外无穷事且尽生前有限杯关于银行管理系统老铁们最先想到的是什么数据结构呢?--应该就是吧(先进先出)今天我将带领大家一起完成银行管理系统。原创 2024-06-13 17:33:22 · 1370 阅读 · 8 评论 -
【STL源码剖析】priority_queue 优先队列的简单实现
我们之前不仅讲过 队列queue 还有 双端队列deque 而我们今天所讲的依旧是队列家族的成员 -- 优先队列priority_queue顾名思义,priority_queue是一个拥有权值观念的 queue,它允许增删元素、访问元素等功能。由于这是一个 queue,所以只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的途径priority_queue 带有权值观念,其内的元素并非依照推入的顺序排序,而是自动依照元素的权值排序(权值通常以实值表示)。权值最高者,排在前面大家想象一下原创 2024-06-04 11:49:15 · 904 阅读 · 1 评论 -
【STL源码剖析】deque 的使用
deque是有下标顺序容器,它允许在其首尾两段快速插入及删除。另外,在任一端插入或删除不会非法化指向其余元素的指针或引用。是一块连续的空间(至少逻辑看来如此),连续空间我们可能会想到(数组)或者。无法成长,虽然可以成长但是只有尾端成长,而且扩容(成长)只是假象,实际上是:另寻更大的空间、将原资料拷贝过去、释放原空间。这样的话成长所带来的代价是相当高的。的想象结构:就是相同的连续空间拼接而成而巧妙的避开了的缺点,原创 2024-06-03 19:46:01 · 909 阅读 · 2 评论 -
【STL源码剖析-空间适配器】stack、queue简单实现
queue是一种先进先出的结构,它有两个出口。queue允许新增元素、移除元素、从最底层加入元素、取得最顶端的元素。但除了最低端可以加入、最顶端可以取出,没有任何其他方法可以存取queue的其他数据。换而言之queue不允许有走访行为,也就不提供迭代器将元素推入queue的动作称为push、将元素推出queue的动作称为pop以某种既有的容器作为底层,将其介面改变,使其符合 [先进先出] 的特性,形成一个queue很容易做到。listdequedeque是一个双端队列,可以在队列的两端。原创 2024-06-01 09:23:36 · 1058 阅读 · 1 评论 -
【STL库源码剖析】list 简单实现
上篇我们已经实现了的部分接口,相较于的连续空间,就显得复杂的多。主要体现在其迭代器的实现上我们知道的空间是连续的,所以我们可以直接对原生指针进行操作,例如只需就可以访问当前空间的下一个位置。而因为空间是不连续的,所以我们不能直接使用等迭代器的相关操作,必须对迭代器进行重新封装的优点:每次安插或者删除一个元素,就配置或者释放一个元素的空间。因此对空间的利用率有绝对的精华,一点都不浪费。而且对任何位置的元素安插或者元素移除,永远都是常数时间。原创 2024-05-28 23:12:35 · 1198 阅读 · 3 评论 -
【STL简单源码剖析】vector的实现
vector 的資料安排以及操作方式,与 array 非常像似。兩者的唯一差別在於空間的運用彈性array 是靜態空間,一旦配置了就不能改變;要換個大(或小) 一點的房子,可以,一切細瑣得由客端自己來:首先配置一塊新空間,然後將元素從舊址一一搬往新址,然後再把原來的空間釋還給系統vector 是動態空間, 隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。原创 2024-05-21 11:25:39 · 925 阅读 · 3 评论 -
【C++程序员的自我修炼】简单实现 string 库的常用接口函数
前面我们已经大致了解到 string 库底层的许多接口函数,为了巩固理解以及快速上手今天我们就来实现一下简单 string 库的实现首先这里提前说明:只是简单的实现底层接口掌握其基本逻辑,并不会涉及太多,比如说模板以及迭代器的底层实现。原创 2024-05-14 17:38:15 · 942 阅读 · 1 评论 -
C++之大数运算
我们知道数据类型皆有范围,一旦超出了这个范围就会造成溢出问题今天说说我们常见的数据类型范围:我们平时写代码也会遇到数据类型范围溢出问题:比如 ~ 我们之前写的学生管理系统在用 int类型 填写学生学号时,我们发现了数据溢出那么我们是怎么解决的呢?我们采用了(数组)在我们 C++ 中也就是类型也就是我们可以用字符串类型存储较大的数(会溢出的数据)而字符串的数学运算也被称为大数运算。原创 2024-05-08 21:31:31 · 1426 阅读 · 2 评论 -
【C++程序员的自我修炼】string 库中常见用法(二)
、插入insert还是老样子,我们先来参考一下文档在进行分析:根据文档我们可以得知是在目标字符串的 pos 位置(注意下标从 0 开始)插入字符串 str不过我们经常用来头插指定位置也是可以哒(后面都以实现头插为主)原创 2024-05-05 20:45:46 · 899 阅读 · 5 评论 -
【C++程序员的自我修炼】string 库中常见的用法 (一)
我们在 C语言 阶段中,字符串是以 \0 为结尾的一些字符的集合,为了操作方便,C标准库 中提供了一些 str 系列的库函数(比如说:strlen、strcpy), 但是这些库函数与字符串是分离开的,不太符合 OOP (面向对象)的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。原创 2024-05-01 18:17:02 · 876 阅读 · 4 评论 -
【C++程序员的自我修炼】初识模板
函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本原创 2024-04-21 17:55:09 · 935 阅读 · 8 评论 -
【C++程序员的自我修炼】如何统计类中创建对象的个数
有老铁会问_count能在初始化列表、构造内部初始化吗?我们这里来看一下 :因为 static 在静态区而不在对象中,所以不走初始化列表、构造内部这里也不能给缺省值,因为缺省值走的是初始化列表static成员变量只能在类外初始化静态成员变量必须在类外定义,类中只是声明接下来我们来计算一下这个类的大小是多少呢?我们发现A类的大小是 4 ,也就是不算static成员的大小总结:静态成员变量尽管声明在类中,但是位置却在静态区所以不计入类的大小static成员函数的特点。原创 2024-04-20 19:29:10 · 1177 阅读 · 1 评论 -
【C++程序员的自我修炼】友元
友元是一种定义在类外部的普通函数或类,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面加以 关键字friend。友元不是成员函数,但是它可以访问类中的私有成员。原创 2024-04-19 19:19:30 · 1080 阅读 · 4 评论 -
【C++程序员的自我修炼】初始化列表
初始化列表:以一个冒号开始,接着是一个以逗号分隔的数据成员列表,每个成员变量后面跟一个放在括号中的初始值或表达式以下就是我们的要传参初始化列表:class Apublic:A(int n):_a(n),_b(n)private:int _a;int _b;当然我们也可以给缺省值进行无参的初始化定义class Apublic::_a(n),_b(n)private:int _a;int _b;我们还可以在初始化列表中进行malloc的动态空间开辟操作class A。原创 2024-04-17 15:45:22 · 778 阅读 · 1 评论 -
【C++程序员的自我修炼】日期类Date的实现
我们学了那么久的 C++ 类与对象,是时候写个小项目练练手了~先提前总结一下今天要用到的知识点(日期类Date 最基本的东西):私有成员,构造函数,拷贝构造函数,析构函数(编译器默认生成),赋值运算符重载。原创 2024-04-16 13:03:01 · 844 阅读 · 4 评论 -
【C++程序员的自我修炼】拷贝构造函数
如果没有管理资源,一般情况不需要写拷贝构造,默认生成的拷贝构造就可以如果都是自定义类型成员,内置类型成员没有指向资源,也类似默认生成的拷贝构造就可以一般情况下,不需要显示写析构函数,就不需要写拷贝构造如果内部有指针、一些值指向资源,需要显示写析构释放,通常就需要显示写构造完成深拷贝先介绍到这里啦~有不对的地方请指出💞。原创 2024-04-13 21:16:08 · 1045 阅读 · 4 评论 -
【C++程序员的自我修炼】构造函数与析构函数的那些事
关于编译器生成的默认成员函数,很多老铁会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?对象调用了编译器生成的默认构造函数,但是对象 _year/_month/_day ,依旧是随机值。也就说在这里编译器生成的默认构造函数并没有什么用?C++把类型分成内置类型和自定义类型🌤️内置类型内置类型就是语言提供的数据类型,如等基础数据类型🌤️自定义类型自定义类型就是我们使用等自己定义的类型编译器自动生成的构造函数不会处理内置类型,它们是随机值。原创 2024-04-10 17:15:47 · 971 阅读 · 2 评论 -
【C++程序员的自我修炼】领对象,包封装
2>组成四要素:类名、成员函数、成员变量、访问限定符类中的。原创 2024-04-06 21:34:16 · 937 阅读 · 5 评论 -
【C++程序员的自我修炼】基础语法篇(二)
的方式来解决这个问题,比如说两数相加函数。原创 2024-04-01 13:19:23 · 711 阅读 · 0 评论 -
【C++程序员的自我修炼】基础语法篇(一)
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。原创 2024-03-29 12:50:15 · 882 阅读 · 1 评论 -
C语言数据结构之计数排序
排序原理计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。是一个不比较排序算法,通过计数将时间复杂度降到了O(N)。排序步骤第一步⭐第二步⭐第三步⭐第四、五步⭐第六步⭐第一步找出待排序数组中最大和最小的元素第二步根据待排序元素的数值范围大小range(max-min+1),建立一个range大小的频数统计数组count第三步将统计数组 count 内的元素全部初始化为0第四步统计数组中每个值为 i 的元素出现的次数,存入数组count的第 i 项第五步对所有的计数累加第六步。原创 2024-03-25 10:02:08 · 470 阅读 · 3 评论 -
C语言数据结构之归并排序
归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序(nlogn),为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题时间复杂度:O(nlogn)空间复杂度:O(n)稳定性:稳定归并排序适用于各种数据规模的排序,而且对于大规模数据的排序效果较好。原创 2024-03-24 21:54:25 · 868 阅读 · 3 评论 -
剑指offer刷题笔记-链表
解决与链表相关的问题总是有大量的指针操作,而指针操作的代码总是容易出错的。很多面试官喜欢出与链表相关的问题,就是想通过指针操作来考察应聘者的编码功底。原创 2024-02-19 18:56:51 · 1046 阅读 · 9 评论 -
C++动态规划-线性dp算法
线性DP(Introduction)线性DP是动态规划问题中的一类问题,指状态之间有线性关系的动态规划问题DP解题套路根据题意列出状态表示dp表里面的值所代表的含义分析问题的过程中发现重复子问题根据状态表示列出状态转移方程dp[i]等于什么初始化填dp表的时候不能越界访问填表顺序递推求解的顺序。原创 2024-02-15 17:15:51 · 1636 阅读 · 2 评论 -
二道经典OJ题带你入门回溯剪枝算法
回溯是递归的副产品,只要有递归就会有回溯。原创 2024-02-06 11:31:29 · 946 阅读 · 2 评论 -
C++基础算法之枚举
1>枚举通过穷举所有可能的情况来解决问题,本质上就是一种搜索算法将问题的所有解的可能都列举出来根据题目要求验证和比较找到满足问题条件的优解或者所有解枚举算法的优缺点>:优点:简单直观,不需要复杂的数学推导,易于实现缺点:运算量过大,当问题的规模变大的时候,循环的阶数越大,执行速度越慢枚举算法的运用场景>:枚举算法适用于问题规模较小、解空间可穷举的情况。原创 2024-01-12 22:20:03 · 2091 阅读 · 0 评论 -
C++算法中两夫妻的故事-双指针
双指针算法是一种常用的算法技巧,它通常用于在数组和字符串中进行快速查找、匹配、排序或移动操作。双指针并非真的用指针实现,一般用两个变量来表示下标双指针算法使用两个指针在数据结构上进行迭代,并根据问题的要求移动这些指针。双指针往往也和单调性、排序联系在一起。在数组的区间问题上,暴力法的时间复杂度往往是O(n^2)的,但双指针利用单调性可以优化到O(n)。常见的双指针模型有:对撞指针快慢指针。原创 2024-01-18 15:34:43 · 1102 阅读 · 1 评论 -
C++基础算法之贪心
贪心算法(greedy algorithm) :是用计算机来模拟一个[贪心]的人做出决策的过程。个人十分贪婪,每一步行动总是按某种指标选取最优的操作。而且他目光短浅,总是只看眼前并不考虑以后可能造成的影响。可想而知,并不是所有的时候贪心法都能获得最优解,所以一般使用贪心法的时候,都要确保自己能证明其正确性。(贪心算法可以比喻为:贪婪+鼠目寸光)例如#小明现在有100元钱,他希望购买尽可能多的商品,请问最多能买多少商品。原创 2024-01-15 23:57:47 · 1387 阅读 · 0 评论 -
植物大战僵尸-C语言搭建童年游戏(easyx)
实现最开始的游戏场景实现游戏顶部的工具栏实现工具栏的植物卡牌植物卡牌的选择与拖动植物的种植植物的摇摆制作启动菜单创建随机阳光收集阳光显示阳光值创建僵尸子弹对僵尸的碰撞僵尸对植物的碰撞场景巡场状态栏下滑游戏输赢的判断原创 2024-01-11 22:52:42 · 5293 阅读 · 3 评论 -
C++中string的库函数
为什么学习string?(1)C语言中,字符串是以 '\0 '结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数, 但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。(2)在OJ中,有关字符串的题目基本以string的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string,很少有人去使用C库中的字符串操作函数。string是C++标准库的重要组成部分,主要用于。原创 2024-01-05 11:06:00 · 1268 阅读 · 4 评论 -
C/C++动态内存分配 malloc、new、vector(简单讲述)
今天来主要讲C++中动态内存分配其中会穿插一些C的内容以及两者的比较如果对C语言中的动态内存分配还不够理解的同学在讲解C++的动态内存分配之前。原创 2024-01-03 15:56:12 · 2091 阅读 · 3 评论