- 博客(24)
- 收藏
- 关注
原创 『 C++ 入门到放弃 』- 红黑树
红黑树是一种自平衡二叉搜索树,通过在节点中添加颜色属性(红/黑)并遵循特定规则来保持近似平衡。其核心规则包括:根节点为黑色、红色节点的子节点必须为黑色、任意路径黑节点数相同。插入操作需分情况处理:空树插入时根节点为黑色;非空树插入红色节点后若父节点为红色,则需通过变色或旋转(单旋/双旋)来调整。旋转操作包括左旋和右旋,用于调整树结构但不改变搜索树性质。红黑树通过这种机制确保最坏情况下路径长度不超过两倍,保持高效操作性能。
2025-07-22 20:25:43
394
原创 『 C++ 入门到放弃 』- AVL树
AVL树实现摘要 AVL树是一种自平衡二叉搜索树,通过平衡因子(右子树高度-左子树高度)确保树平衡。文中详细介绍了AVL树的实现: 节点结构:包含左右子节点指针、父节点指针、键值对数据和平衡因子(_bf)。 旋转操作: 右旋:处理左子树过高的情况,将左子节点提升为根节点 左旋:处理右子树过高的情况,将右子节点提升为根节点 左右旋:先左旋左子节点再右旋父节点,处理左右不平衡 右左旋:先右旋右子节点再左旋父节点,处理右左不平衡 每种旋转操作都详细说明了指针调整步骤和平衡因子更新逻辑,并配有图示说明。
2025-07-19 19:18:40
195
原创 『 C++ 入门到放弃 』- set 和 map 容器
本文介绍了C++中的set和map两种关联容器。set是存储唯一元素的有序集合,底层采用二叉搜索树实现,提供插入、查找、删除等基本操作,时间复杂度为O(log n)。map存储键值对,同样基于红黑树实现,支持通过[]或at访问修改元素,提供三种插入方式:insert、operator[]和emplace。两种容器都支持迭代器遍历,并包含lower_bound、upper_bound等范围查找功能。set主要用于去重排序,map则适合键值映射场景,二者在STL中都是高效的数据结构实现。
2025-07-18 18:38:11
299
原创 『 C++入門到放棄 』- string
C++ string类学习笔记摘要 本文整理了C++标准库中string类的核心知识点,包括: 基本概念:string是封装了C字符串操作的类,提供自动内存管理和丰富操作接口。 常用方法:包括创建/赋值、长度获取(s.size())、元素访问(s.at())、增删改查(append/erase/find)等操作,以及与C字符串转换的c_str()方法。 与C字符串对比:string自动管理内存和边界,安全性更高;而C字符串需手动处理内存和'\0'结尾。 注意事项:直接下标访问可能越界,c_str()返回不可
2025-07-05 21:22:13
365
原创 『 C++入門到放棄 』 - vector 容器
本文摘要: C++ vector容器是一种顺序表结构的动态数组,提供高效的随机存取和动态扩容功能。文章详细介绍了vector的基本操作(push_back/pop_back)、元素存取([]/at())、遍历方法(迭代器/范围for),以及空间管理(reserve/resize)。重点解析了vector的模拟实现,包括迭代器设计、深拷贝处理、插入删除操作时的迭代器失效问题及解决方案。通过模板类实现展示了vector的核心机制,如动态扩容策略和元素搬移逻辑,帮助深入理解STL容器的底层原理。(字数:150)
2025-06-21 19:36:30
491
原创 【数据结构】堆与二叉树
树是一种非线性的数据结构,其由 n 个 ( n >= 0 ) 有限节点所组成的一个有层次关系的集合。之所以称其为树,是因为其逻辑结构看起来像是一颗倒挂的树。在树中,有一个特殊的节点称为根节点(如上图中的 body 节点)根节点的特色是他没有前驱节点,除了根节点之外的其他节点被分成了 M 个 ( M > 0 )互不相交的集合T1T2TmT1T2...Tm每一个集合的结构与树类似,我们又称其为子树,每个子树的根节点都有且只有一个前驱节点。
2025-03-02 21:03:39
1309
9
原创 【C语言复习】字符串函數
如果来原字符串的长度小于num,则拷贝完来原字符串后,在目标空间后边追加 0 直到num个。如果 source 指向的字符串的⻓度⼩于 num 的时候,只会将字符串中到。这个函数的作用就是在目标字符串后追加 source 字符串。比较是比较 str1 和 str2 字符的ASCII码值。的内容追加到destination指向的字符串末尾。读者有兴趣可以去看看错误码有哪些。这个函数可能相对会比较抽象。标准规定的返回值如下。它在做的事情是这样的。
2025-02-12 21:37:34
865
3
原创 指针复习 ( 下 )
根据数组名是数组⾸元素的地址这个规则,⼆维数组的数组名表⽰的就是第⼀⾏的地址,是⼀维数组的地址。根据上⾯的例⼦,第⼀⾏的⼀维数组的类型就是 int [5] ,所以。parr[i]是访问parr数组的元素,parr[i]找到的数组元素指向了整型⼀维数组,parr[i][j]就是整型⼀维数 组中的元素。⼆维数组其实可以看做是每个元素是⼀维数组的数组,也就是⼆维 数组的每个元素是⼀个⼀维数组。在本质上,数组传参传递的是首元素的地址,既然传入的是地址,那函数形参理论上也就应该使用指针变量来接收首元素的地址。
2025-02-12 11:26:13
809
1
原创 指针复习 ( 上 )
我们知道传值调用之所以没有办法成功交换 a 和 b 的值是因为 x、y 与 a、b的地址是不一样的,那我们只要让传入的形参是 a 和 b 的地址,不就能顺利交换了?这种传递的方式就称为。可以看到,藉由传入 a 和 b 的地址当做 Swap2 函数的参数,就可以成功让 a 和 b 的值进行交换,这种方式就称为。因为 a 是整型,申请了4个字节的空间,这4个字节是连续的,因此只要知道最小字节的地址,就能访问到4个字节的数据。而我们拿到了变量的地址,就能去拿到这个地址中的内容,要怎么拿到地址中的内容呢?
2025-02-12 00:18:53
884
6
原创 【数据结构】单向链表 OJ篇
假设环存在,当慢指针进环时没有和快指针碰上,则快指针就会开始追击慢指针。思路 : 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。思路1 : 大于等于 x 的一个新链表,小于 x 的一个新链表,在小于x的新链表的最后一个节点后插入大于等于x的新链表。思路 : 利用两个指针,一个指针每次只走一步,另一个指针每次走两步。当慢指针走一步,快指针走三步,假设环存在,则在环中,两个指针每次的距离都会缩减两步。
2025-02-08 20:07:41
1658
5
原创 【初阶】数据结构 - 单向链表
此外,虽然双向带头循环链表的结构较为复杂,但等我们真正实现这种链表后会发现它有很多优势。这种链表的结构较为复杂,一般用双向带头循环链表来单独存储数据,实际上使用的链表数据结构都是双向带头循环链表。一般来说不会用来存储数据,通常是用来作为其他数据的子结构,如哈希桶、图的邻接表等。本身的值,让它存储新节点的地址。链表是物理上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现。在线性表的逻辑结构中,数据元素是按顺序排列的,因此它在。但在线性表的物理存储方式上,它不一定是连续的。
2025-02-04 20:40:11
1569
2
原创 【入门】C++
宏的优点增加带码的复用性提高性能宏的优点不方便调试 ( 因为预处理阶段就进行了宏替换 )对于有些操作,宏定义会比较复杂,导致代码可读性差、可维护性差没有类型安全检查相较于宏定义函数,inline函数更 安全、可调试、可优化,并且可以与模板结合使用。
2025-02-01 10:45:24
1037
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅