- 博客(21)
- 收藏
- 关注
原创 红黑树插入:三步与验证
红黑树是一种近似平衡的二叉搜索树,通过颜色规则(节点非红即黑、根为黑、红节点子节点为黑、每路径黑节点数相同)保证高度不超过 $2\log_2(N+1)$,实现 $O(\log n)$ 的查找、插入与删除。插入时新节点默认红色,仅当父节点为红时才需修复:叔红则染色上移,叔黑则通过单旋或双旋调整,并确保新根为黑。旋转操作需正确维护父子指针关系,避免断链。最终通过验证根非红、各路径黑节点数一致来确保结构合法。
2026-11-10 16:41:18
174
原创 AVL 树学习笔记
AVL树通过限制结点左右子树高度差≤1,确保树高维持在O(logN),从而保障增删查改的稳定效率。核心在于平衡因子(bf = 右高 - 左高)的维护与旋转调整。插入后从父结点向上回溯更新bf,依据bf值决定是否停止、继续或旋转:bf为0则停,±1则继续,±2则旋转。旋转分四种情况:LL/RR为单旋,LR/RL为双旋,均需保序且恢复子树原高度。关键细节包括:必须使用parent指针高效回溯;旋转时注意空指针判空、父子关系更新及挂接位置判断。该结构虽略复杂,但实现简洁高效,是最早且最直观的自平衡二叉搜索树之一。
2026-11-04 21:28:55
143
原创 STL 容器 set 与 map 完全指南:从红黑树到刷题实战
本文系统讲解STL中set与map的底层原理(红黑树)及使用技巧,涵盖其有序性、迭代器特性、增删查接口,并通过刷题实战对比红黑树与哈希表的选型策略,帮助开发者高效掌握关联式容器的核心应用。
2026-11-02 00:16:37
171
原创 二叉搜索树(BST)基础总结
二叉搜索树(BST)是一种支持高效查找、插入和删除的动态数据结构,其核心性质是中序遍历得有序序列。插入总在叶子位置,查找沿路径进行,删除分四种情况:叶节点直接删;单子树用子树替换;双子树用左子树最大或右子树最小值替换。最坏情况下退化为链表,复杂度升至O(N),故工程中常采用AVL树或红黑树保证平衡,实现O(log N)性能。
2026-10-28 20:10:56
190
原创 C++ 继承与多态一次讲透:从两份练习代码说起
本文通过实测分析两份C++继承与多态练习代码中的典型问题:多态演示未使用基类引用/指针,无法体现动态绑定;抽象基类缺失虚析构函数,导致资源泄漏风险;stack类公有继承std::vector破坏封装,且未继承构造函数。同时梳理核心知识点:虚函数表机制、访问控制、菱形继承与虚继承、纯虚函数与抽象类、成员函数重写规则等。强调“编译通过≠逻辑正确”,提出规范实践建议:多态必须通过基类指针/引用调用虚函数,抽象基类需虚析构,优先使用模板模板参数替代宏,用using Base::Base;显式继承构造函数。所有结论基
2026-10-22 18:31:13
369
原创 从零实现:stack、queue 与 priority_queue —— C++ 容器适配器实践笔记
本文系统阐述了STL中stack、queue与priority_queue作为容器适配器的设计原理。核心在于:它们通过适配底层容器(默认为deque)实现接口封装,其中deque因支持头尾O(1)操作而成为理想选择,且避免了其遍历效率低的缺陷。stack与queue分别依赖push_back/pop_back与push_back/pop_front,故不可用vector作底层。priority_queue则基于堆结构,通过仿函数(如Less、Greater)实现自定义优先级,体现模板策略灵活性。代码模拟实现
2026-10-12 09:00:00
646
原创 C++ STL:list 底层结构、模拟实现与 vector 对比
list 是 STL 中基于带头结点双向循环链表的序列容器,支持在常数时间内任意位置插入与删除,但不支持随机访问。其核心特性包括:迭代器不失效(插入安全,删除仅使对应迭代器失效)、高效的 push_front/pop_back 操作,以及通过 begin()/end() 和 rbegin()/rend() 实现正反向遍历。模拟实现中采用哨兵节点简化边界处理,迭代器封装节点指针以支持 ++/-- 操作,整体设计高效且安全。
2026-09-29 09:30:00
602
原创 从零实现:C++ vector 模拟实现 —— 学习笔记
本文系统梳理STL vector 的三重境界:能用、明理、能扩展。重点解析其底层三指针结构、扩容机制(VS 1.5倍,g++ 2倍)、迭代器失效原理及应对策略,并通过OJ题实战强化应用。最后以模拟实现tx_vector收尾,完整呈现从框架到核心函数的构建过程,助力深入掌握vector的本质与使用精髓。
2026-09-23 09:45:00
187
原创 C++ String 学习笔记:string 类的使用与模拟实现
学习 string 类可解决 C 语言字符串操作繁琐、易越界的问题。C++ 的 string 封装了字符串,自动管理内存,支持链式操作(如 s += "x"),更符合面向对象思想。配合 C++11 的 auto 和范围 for,代码更简洁高效。string 提供丰富的接口,如构造、容量操作(size、capacity、reserve)、访问(operator[]、迭代器)等,适用于算法题与实际开发,是现代 C++ 必备基础。
2026-09-16 09:30:00
249
原创 C++模板初阶:泛型编程、函数模板与类模板(代码 + 概念详解)
本文系统梳理C++模板核心概念:通过函数重载的弊端引出泛型编程需求,详解函数模板的定义、实例化(隐式/显式)及参数推演规则,并对比普通函数与模板的调用优先级。随后介绍类模板的定义与实例化机制,以Stack为例说明其使用方式。全文代码与概念一一对应,实现类型无关的通用代码设计,提升复用性与可维护性。
2026-09-10 09:30:00
551
原创 C/C++ 动态内存管理 —— “malloc/free” 与 “new/delete”
<think>我们只需要根据内容生成 ≤150字的摘要,内容是关于malloc/free与new/delete的对比,包括区别、本质。需要简洁概括。</think>本文对比了C语言的malloc/calloc/realloc/free与C++的new/delete,重点分析对内置类型和自定义类型的差异。关键区别:new/delete是操作符,能自动计算空间、初始化,并针对自定义类型调用构造和析构函数;而malloc/free仅分配释放空间。数组需配套delete[],realloc后旧指针失效。自定义类型必
2026-09-08 10:00:00
517
原创 类和对象补充知识总结 —— C++语法实践笔记
<think>好的,用户给了一份关于C++类和对象的详细笔记,要求生成不超过150字的摘要。 这个任务的核心是高度浓缩内容,保留最重要的知识点。笔记里有七个主题,篇幅都不小,需要取舍。 初始化列表部分的关键信息是:引用、const成员、无默认构造的类类型成员必须用初始化列表;初始化顺序按声明顺序,与列表书写顺序无关。这个要保留。 类型转换的关键点是:构造函数支持隐式转换,explicit可禁止,多参数用{}支持。 static成员的关键点:属于类不属于对象,类外初始化,静态成员函数无this,只能访问静态成
2026-09-04 15:37:14
270
原创 从零掌握C++类与对象(上+中)—— 基础知识点全面总结
这篇文章系统介绍了C++类和对象的核心概念,主要内容包括: 类的定义与封装 - 讲解了类的基本语法、访问限定符和this指针机制 六个默认成员函数 - 详细解析构造函数、析构函数、拷贝构造和赋值重载的实现要点 运算符重载实践 - 以Date类为例,展示了+=、-=等运算符的重载实现技巧 文章采用代码示例+关键点分析的形式,重点强调了: 类与对象的本质区别(设计图vs实例) this指针的工作原理 深浅拷贝的区别及适用场景 日期类核心运算符的进位/借位逻辑 全文提供了完整可运行的代码示例,适合C++初学者系统
2026-08-12 23:19:48
337
原创 从零开始:C++ 第一堂课核心知识点 —— 入门笔记
本文摘要(150字): C++入门核心知识点整理,涵盖语言发展历程、基础语法特性与编程范式。从1979年Bjarne Stroustrup创建C++的初衷讲起,重点解析命名空间(namespace)解决命名冲突的原理,对比C风格输入输出与C++流式IO差异。详细说明缺省参数的规则应用、函数重载的实现条件及限制,深入剖析引用(&)的底层机制与指针区别。通过代码示例演示inline函数优化、nullptr安全特性等现代C++特性,为后续学习面向对象和模板编程奠定基础。内容兼顾理论深度与实践指导,适合C++初学者
2026-07-18 07:53:07
357
原创 从零实现:七大排序算法 —— C语言数据结构实践笔记
本文用C语言实现了七大经典排序算法,包括直接插入排序、冒泡排序、选择排序、希尔排序、堆排序和快速排序等。详细讲解了每种算法的核心思想、关键实现步骤和时间复杂度分析,并提供了完整可运行的代码示例。文章重点介绍了排序算法的优化技巧,如希尔排序的分组预排序、堆排序的向下调整策略等,帮助读者深入理解排序算法的本质。所有排序算法均采用整型数组作为操作对象,便于测试和性能对比。
2026-06-25 13:17:20
204
1
原创 从零实现:堆与链式二叉树 —— C语言数据结构实践笔记
本文介绍了用C语言从零实现堆(小根堆)和链式二叉树的实践笔记。主要内容包括: 堆的实现:采用动态数组存储,核心操作是向上调整(插入时)和向下调整(删除时),详细分析了父子节点关系与调整逻辑 堆的应用:实现了堆排序和TopK算法,展示如何利用堆高效处理海量数据 链式队列:作为二叉树的辅助结构,实现了基于单链表的队列,支持O(1)时间复杂度的入队出队 二叉树实现:构建了链式存储结构,演示了前序、中序、后序三种递归遍历方式 文章采用核心代码+关键分析的形式,适合数据结构复习与实现参考,所有操作都遵循严格的逻辑与边
2026-06-11 18:33:14
354
原创 复杂度及相关例子
衡量算法执行时间随输入规模n的增长趋势,关注基本操作执行次数的函数关系。衡量算法运行时额外占用存储空间与n的关系,关注显式申请的变量或数据结构。
2026-04-23 20:00:40
160
原创 结构体相关知识
摘要:本文介绍了C语言中结构体(Struct)的基本概念和使用方法。结构体是一种用户自定义的复合数据类型,可将不同类型的数据组合在一起。文章详细讲解了结构体的声明语法、初始化方法、成员访问方式(.和->操作符),以及常见的结构体类型,包括基础结构体、嵌套结构体、匿名结构体、位域结构体和动态结构体。重点分析了内存对齐规则和位域的特性,指出位域可以精确控制成员占用的内存位数以节省空间,但也存在平台依赖性等问题。最后强调需要通过实践练习来掌握结构体的使用,并理解内存对齐规则对结构体大小的影响。
2026-03-11 18:46:00
383
原创 部分字符串函数的简单模拟实现
本文介绍了C语言中7个常用字符串处理函数的模拟实现方法:strlen(三种实现方式)、strcpy、strcat、strcmp、strstr、strncpy和strncat。每个函数都先通过Cplusplus网站查询其标准语义,再用示例代码演示功能,最后给出模拟实现代码及详细注释。特别对较复杂的strstr函数进行了重点分析,展示了字符串查找的实现思路。文章强调在实际编程中应注重边界条件处理,建议通过画图和调试来加深理解。这些模拟实现虽在理想条件下完成,但为理解底层字符串操作原理提供了良好参考。
2026-02-09 00:47:02
691
原创 c语言学习记录┃第一个程序及常见概念
本文介绍了C语言编程的基础知识,包括VS2022开发环境配置、第一个"Hello World"程序示例、ASCII码表、关键字、注释用法、转义字符和格式化占位符等核心概念。重点讲解了printf函数的使用方法、常见转义字符的功能以及%d、%f等格式化输出的应用场景,并提供了相关参考网站链接。这些内容为C语言初学者提供了必要的编程基础,有助于后续更深入的学习。
2025-09-18 17:20:15
1048
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅