- 博客(37)
- 收藏
- 关注
原创 C++ 二叉树序列化与分层遍历:基础、变式与实战详解
本文系统讲解了二叉树的序列化和分层遍历算法。序列化部分通过前序遍历实现,重点处理空括号的保留与省略规则。分层遍历介绍了基础层序遍历及其变式:自底向上遍历(结果反转)和锯齿形遍历(奇偶层方向控制)。文章对比了三种分层实现方法,推荐使用层大小控制法,并分析了C++与C的实现差异。这些基础算法不仅是面试高频考点,更为后续高级树算法学习奠定基础。通过10道例题的详细解析,帮助读者掌握树结构的核心操作技巧。
2025-11-24 23:38:36
474
原创 BST 转双向链表与二叉树重建(前序 + 中序)
本文深入解析了二叉搜索树转双向链表和基于遍历序列重建二叉树两类经典问题。对于BST转双向链表,利用中序遍历有序性,通过双指针调整节点指针实现转换,需注意prev指针的引用传递和边界处理。在遍历序列重建二叉树问题上,前序/后序序列定位根节点,中序序列划分左右子树,通过递归分治完成构建,特别强调后序序列需先构建右子树的关键差异。文章通过代码实现和步骤拆解,揭示了二叉树遍历序列的内在联系,帮助掌握树结构的转换与构造技巧,提升解决相关算法问题的能力。
2025-11-24 23:38:18
373
原创 C++ 二叉搜索树进阶:删除操作、平衡思想与应用模型
本文深入探讨了二叉搜索树(BST)的核心操作与应用。首先详细解析BST删除操作的三大场景(左/右子树为空、左右子树均非空),重点介绍了替换法删除策略及其实现细节,并指出根节点处理等常见坑点。其次阐述了BST性能瓶颈及平衡思想的重要性,强调通过旋转等机制维持树高。文章还对比了Key模型(元素存在性判断)和KV模型(键值映射)的应用场景,通过代码示例展示了KV模型在统计场景中的实际应用。最后总结了BST操作要点和两种模型的核心差异,为后续学习平衡树和复杂算法奠定基础。
2025-11-22 23:25:59
1363
原创 Python 浪漫表白神器:用爱心弹窗轰炸你的心上人!
本文介绍了一个用Python创建的浪漫爱心弹窗表白程序。该程序使用tkinter库生成图形界面,通过数学参数方程绘制爱心形状,并在屏幕上依次弹出150个小弹窗组成爱心图案,最后显示用户自定义的告白语。程序采用多线程技术控制弹窗节奏,提供启动/停止按钮和告白语输入框。文章详细讲解了环境搭建、数学原理、代码实现(包括爱心坐标计算、弹窗创建、多线程控制等核心功能)以及个性化定制方法。这个创意项目既可作为独特的情人节礼物,也是学习Python GUI编程、多线程和数学应用的实用案例。
2025-11-22 18:22:18
544
原创 【C++ 数据结构】二叉搜索树:原理、实现与核心操作全解析
本文系统介绍了二叉搜索树(BST)的核心概念和C++实现。主要内容包括:1)BST的定义与特性,重点分析了其排序规则和中序遍历有序性;2)完整代码实现,涵盖插入、查找、删除等核心操作;3)详细解析删除操作的三种情况处理,特别是左右子树均存在时的替换法;4)代码优化建议和常见错误分析;5)总结BST优缺点并指出进阶学习方向(AVL树、红黑树等)。文章通过清晰的代码示例和深入解析,帮助读者掌握BST的实现原理和应用场景,为学习更复杂的树结构奠定基础。
2025-11-21 17:21:15
1120
原创 C++ 继承与多态:从概念到底层原理全解析
本文系统讲解了C++继承与多态的核心机制。继承实现代码复用,但需注意菱形继承问题(通过虚继承解决);多态通过虚函数实现接口统一与行为差异化,依赖于虚函数表机制。重点内容包括:继承与组合的选择(优先组合)、虚函数表结构、多态实现的三大方式(重载/覆盖/隐藏)、抽象类与纯虚函数、虚析构函数必要性等。文章结合底层原理与常见面试考点,强调实践中的设计原则(最小权限、优先组合),并指出虚函数的限制与性能考量。通过代码调试理解内存布局是掌握这些概念的关键。
2025-11-21 00:23:25
966
原创 揭秘 C++ 多态底层:虚函数表与动态绑定机制
本文深入解析C++多态的底层实现机制——虚函数表(vtable)。通过sizeof谜题引出虚表指针概念,阐述虚表的生成时机、单继承和多继承下的结构特点,并剖析动态绑定的实现过程。从内存布局和汇编层面验证虚表的作用原理,指出虚表存储在代码段而非栈/堆中,同时说明虚函数的限制条件。最后解答常见面试问题,强调多态通过虚表指针实现运行时动态绑定的本质。理解虚表机制对编写高效代码和应对技术面试都具有重要意义。
2025-11-20 00:47:20
907
原创 C++ 多态的进阶应用:抽象类、继承与组合的选择
本文深入探讨了C++多态的进阶应用,重点分析了抽象类与接口继承的特性区别,指出抽象类通过纯虚函数强制派生类实现接口规范。同时对比了继承(is-a关系)与组合(has-a关系)两种代码复用方式的优缺点,强调优先使用组合以降低耦合度。最后提出优秀的设计需要结合抽象类、多态和组合,构建出灵活可扩展的系统架构,遵循开闭原则和合成复用原则,实现代码的高效维护与扩展。
2025-11-20 00:46:05
759
原创 深入理解 C++ 多态:从概念到实现的完整解析
本文详细介绍了C++中多态的核心概念、实现条件和应用场景。多态通过虚函数和基类指针/引用实现"一个接口,多种实现",提升代码灵活性。重点讲解了虚函数重写规则、协变特例和析构函数重写的必要性,并对比了重载、重写和隐藏的区别。掌握多态机制对代码复用和面试都至关重要,本文为理解多态提供了系统性的指导框架。
2025-11-19 17:56:27
1162
原创 C++ 菱形继承深度解析:问题根源、解决方案与内存模型
本文深入解析C++中的菱形继承问题及其解决方案。菱形继承会导致数据冗余和访问二义性,如一个派生类包含两份基类成员。通过虚继承(virtual关键字)可解决这一问题,确保派生类只保留一份基类成员,但会带来内存开销和访问效率降低。文章详细对比了普通继承和虚继承的内存布局差异,剖析了虚基表指针的工作原理,并指出虚继承的三大代价:空间、时间和复杂度。最后建议优先避免多继承,谨慎使用虚继承,并深入理解其内存模型。
2025-11-19 16:32:56
866
原创 C++ 继承基础:概念、访问规则与作用域详解
本文系统介绍了C++继承的核心概念与使用规则。主要内容包括:继承的本质是类层次的复用与扩展,通过public/protected/private三种继承方式控制成员访问权限;子类对象可赋值给父类对象(切片机制),反之则禁止;同名成员存在作用域隐藏现象,需注意与函数重载的区别。文章还提示了后续将探讨的派生类成员函数、多继承等进阶话题。掌握这些基础规则是理解面向对象编程中继承机制的关键。
2025-11-16 08:00:00
924
原创 C++ 继承进阶:默认成员函数、多继承与设计选择
本文深入探讨了C++继承的进阶知识点。首先分析了派生类默认成员函数的处理规则,包括构造、析构、拷贝构造和赋值运算符中对父类成员的特殊处理方式。其次探讨了继承中的特殊场景,如友元关系、静态成员和final类的设计。重点剖析了多继承的菱形陷阱及虚继承解决方案,并比较了虚继承的优缺点。最后对比了继承与组合的设计差异,强调"is-a用继承,has-a用组合"的原则,建议优先选择组合以降低耦合度。文章旨在帮助开发者从基础继承使用提升到合理设计继承体系,既解决开发难题也覆盖面试考点。
2025-11-16 08:00:00
1352
原创 C++ 模板进阶:解锁泛型编程的高级玩法
本文介绍了C++模板编程的三个进阶特性。首先探讨非类型模板参数,允许将整型、指针等常量值作为参数,用于实现固定大小数组等场景。其次详细讲解模板特化机制,包括函数模板特化和类模板特化(全特化与偏特化),以及它们的匹配优先级规则。最后分析模板的分离编译问题及解决方案,推荐将声明和实现统一放在头文件中。这些特性能够提升代码的灵活性和效率,是掌握C++泛型编程的关键内容。
2025-11-15 13:57:16
1269
2
原创 优先级队列与堆:如何高效求解第 K 大元素
在栈和队列之后,本文将介绍另一种重要的容器适配器 ——优先级队列(priority_queue)。我们将深入探讨其底层基于 ** 堆(Heap)** 的数据结构,详细讲解堆的插入、删除等核心操作,重点补充仿函数的作用与实现逻辑。最后,我们通过 “数组中的第 K 个最大元素” 这一经典例题,展示 priority_queue 的实际应用,对比不同解法的性能差异,揭示算法优化的魅力。
2025-11-15 00:25:55
815
原创 从逆波兰表达式到双端队列:STL 容器适配器的底层智慧
在上一篇博客中,我们探讨了栈和队列的基本应用。本篇将深入其内部,揭示它们的底层实现 ——双端队列(deque)。我们将从一个实际的算法问题 “逆波兰表达式求值” 出发,引出对栈效率的思考,进而深入剖析 deque 的结构设计、工作原理及其为何能成stack和queue的默认底层容器。最后,我们将对比 vector、list 和 deque 这三者的优劣,帮助你在实际开发中做出最佳选择。
2025-11-15 00:25:24
706
原创 软考中级软件设计师备考指南(二):计算机体系结构与指令系统
本文重点解析计算机体系结构三大核心考点:1. 体系分类:详解Flynn分类法(SIMD/MIMD实例)和处理机数量分类(单处理/多处理/分布式系统);2. 指令系统:对比CISC/RISC特性差异,分析不同寻址方式的速度排序(立即寻址最快);3. 流水线技术:提供流水线时间计算公式(总时间=第一条指令时间+(n-1)×最长阶段时间)及性能指标计算方法。文章强调考试高频考点与常见易错点,为备考者提供清晰的解题思路和记忆技巧。
2025-11-14 15:42:54
880
原创 深入理解栈与队列: STL 适配器的本质与应用
本文旨在深入刨析C++ 标准模板库(STL)中栈(stack)和队列(queue)的本质。我们将揭示他们作为“容器适配器”的设计思想,详细讲解其核心接口、特性差异、模板参数的作用,以及再实际问题中的应用,特别是通过“最小栈”和“栈的压入弹出序列”两个经典列题,展示其再解决特点问题时的强大能力和巧妙设计。
2025-11-14 14:03:59
945
原创 软考中级软件设计师备考指南(一):计算机系统基础与数据表示
摘要:《软件设计师》考试中"计算机系统知识"模块占比10%,重点考察硬件组成与数据表示。核心考点包括:1)冯诺依曼五大部件(运算器、控制器、存储器、输入/输出设备)及CPU集成逻辑;2)CPU内部结构(运算器、控制器组件功能)与指令执行流程;3)数据表示(进制转换、补码编码、IEEE754浮点数标准);4)校验码(奇偶校验、海明码)。该模块知识点细碎,需注意PC寄存器功能、补码运算、浮点数隐含1等易错点,掌握快速解题技巧。(150字)
2025-10-13 21:28:46
762
原创 软件设计师必考:程序设计语言3分速通指南(二)
本文系统介绍了软件设计师考试中程序设计语言处理的核心知识,包括文法、正规式、有限自动机、语法分析方法和编译解释原理。重点解析了文法四元组(Vₙ,Vₜ,P,S)概念、4种文法类型及其对应自动机,详细对比了DFA与NFA的差异,并阐述了自上而下与自下而上两种语法分析方法的特点。最后通过编译与解释的对比表格,突出二者在目标代码、执行效率和可移植性等方面的关键区别。文章采用"定义+实例+例题"的讲解方式,帮助考生掌握词法分析、语法分析等编译原理难点内容,为应对相关考试题目提供系统指导。
2025-10-13 21:17:04
972
原创 软件设计师必考:程序设计语言3分速通指南(一)
软件设计师考试中,程序设计语言基础知识是必考内容,主要涉及语言分类、高级语言特性、程序设计的核心成分等。低级语言(如机器语言、汇编语言)贴近硬件,执行效率高;高级语言(如Python、Java)更接近自然语言,可读性强。程序设计语言包含数据、运算、控制、传输四大核心成分。不同语言有各自特性,如Python的type()函数用于获取对象类型,Java通过中间代码实现跨平台。控制结构包括顺序、选择、循环三类,函数调用方式分为传值调用和引用调用,需注意形参修改对实参的影响。掌握这些知识点有助于高效备考。
2025-10-12 21:42:04
595
原创 软考中级软件设计师备考指南(四):I/O 技术、安全与可靠性 —— 综合应用篇
本文总结了软考中级软件设计师考试中关于I/O技术、总线系统、信息安全与可靠性计算的核心知识点。重点内容包括:四类I/O交换方式(程序查询、中断、DMA、IOP)的特点对比;系统总线的分类与三类总线(数据、地址、控制)的功能;加密技术(对称/非对称加密)与数字签名的实现原理;以及串联/并联系统的可靠性计算公式。备考建议通过表格对比和公式默写强化记忆,并配合真题练习提升解题能力。这些内容是考试的高频考点,掌握后能有效提高通过率。
2025-10-10 23:47:06
914
原创 软考中级软件设计师备考指南(三):存储系统 —— 从 Cache 到磁盘的性能优化
本文系统梳理了计算机存储系统的核心知识点,重点分析了存储层次结构、存储器分类、Cache原理、虚拟内存和磁盘存取等关键内容。存储层次采用"金字塔"结构平衡速度、容量和成本;RAM分为SRAM(高速Cache)和DRAM(主存),ROM具有断电保活特性;Cache通过局部性原理和三种地址映射方式提升CPU访问效率;虚拟内存通过主存+辅存扩展逻辑容量;磁盘存取时间计算需区分寻道、旋转等待和传输三个部分。软考备考需特别注意Cache映射方式、DRAM刷新机制、虚拟内存本质等易错点,掌握磁盘时间
2025-10-10 23:42:07
674
原创 C++ STL list 深度解析(下篇):const 迭代器、深拷贝与迭代器失效
本文深入探讨了list容器的核心实现与使用技巧,主要包括以下内容:1. 通过模板参数复用技术实现const迭代器,确保只读访问安全;2. 分析insert和erase操作的底层指针调整逻辑,解释迭代器失效机制;3. 实现深拷贝构造和赋值运算符,避免内存共享问题;4. 对比list与vector在迭代器失效、访问效率等方面的本质差异;5. 提供容器选型策略,指导在不同场景下选择合适的数据结构。文章通过代码示例和原理分析,帮助读者全面掌握list的底层实现细节和实际应用技巧。
2025-10-09 23:35:55
699
1
原创 C++ STL list 深度解析(中篇):底层实现与迭代器封装
本文深入剖析了STL中list容器的底层实现原理。list采用带头节点的双向循环链表结构,通过节点指针实现高效插入删除操作。其迭代器是自定义封装类型,通过重载运算符模拟指针行为,但不支持随机访问。文章详细讲解了节点结构设计、迭代器实现技术、核心操作(如push_back)的指针调整逻辑,并对比了vector与list的迭代器差异。最后介绍了list的内存管理机制和阅读STL源码的实用技巧,为理解list的高效性和局限性提供了底层视角。
2025-10-09 22:47:37
1152
1
原创 从 C 到 C++:类和对象(下篇)—— 进阶特性与工程实践
本文深入探讨C++类和对象的高级特性,包括构造函数的初始化列表与explicit关键字、静态成员、友元机制、内部类、匿名对象以及编译器对拷贝构造的优化。重点解析了初始化列表的高效性和必要性,静态成员的共享特性,友元对封装的突破及其谨慎使用的必要性。同时介绍了内部类的隐藏优势、匿名对象的临时性特点,以及编译器在传参和返回值时的优化机制。最后从工程角度重新审视封装的价值,强调高内聚低耦合的设计原则。这些核心知识构成了C++面向对象编程的基础体系,为后续继承和多态的学习奠定坚实基础。
2025-10-08 22:40:26
1181
1
原创 C++ STL list 深度解析(上篇):从定位到实战使用
本文深入解析C++ STL中的list容器,将其与vector进行对比,突出list在频繁插入删除场景下的优势。文章分为三部分:首先对比list和vector的核心特性,阐明list适合高频修改场景;其次详细介绍list的初始化、插入删除、遍历等基本操作,强调其O(1)时间复杂度的增删效率;最后分析list迭代器的双向特性及容量访问方法。作为上篇,本文为后续深入探讨list的底层实现、迭代器失效等问题奠定基础,完整呈现了list的基本使用方法和核心特点。
2025-10-08 22:39:30
960
原创 从 C 到 C++:类和对象(中)—— 默认成员函数与 const 的深度解析( this 指针的补充)
本文深入解析了C++类的核心机制,重点关注this指针和默认成员函数。主要内容包括: this指针:编译器隐式添加到非静态成员函数的参数,指向当前调用对象,用于区分不同对象的成员变量访问。其特性包括不能显式声明但可显式使用、优先使用寄存器存储、空指针调用风险等。 默认成员函数:编译器自动生成的6个函数,重点讲解了构造函数(对象初始化)、析构函数(资源清理)、拷贝构造函数(对象克隆)和赋值运算符重载(对象赋值)。其中构造和析构函数构成对象的生命周期管理,拷贝和赋值需注意浅拷贝问题。 const成员函数:通过修
2025-10-03 23:32:53
1106
1
原创 从 C 到 C++:类和对象(上篇)—— 面向对象的入门基石
本文从C结构体到C++类的演进过程切入,详细讲解了C++中类的核心概念。主要内容包括:1)C++类对C结构体的功能升级,实现数据和方法的封装;2)类的定义语法、访问限定符(public/private)及其作用;3)类与对象的关系,实例化的过程;4)对象大小的计算规则,解释为何成员函数不占对象内存。文章还预告了this指针等进阶内容,为学习面向对象编程打下基础,适合从C语言过渡到C++的开发者阅读。
2025-10-03 12:19:33
638
2
原创 深入解析你的 vector 模拟实现:从代码到底层逻辑
本文深入解析了C++ vector的模拟实现,重点介绍了其核心设计、内存管理及关键接口的实现细节。文章从vector的三指针结构(_start、_finish、_endofstorage)切入,分析了迭代器用指针实现的高效性。详细讲解了构造/拷贝/析构函数中如何避免内存泄漏和浅拷贝问题,特别是"值传递+swap"的现代赋值实现。在容量管理部分,强调了reserve中循环深拷贝的必要性,以及resize对缺省值的处理。元素修改接口展示了insert如何修复扩容导致的迭代器失效,erase返
2025-10-02 23:13:14
490
1
原创 C++ vector 全方位解析:从使用到实现,再到实战进阶
该文章从 “使用、应用、实现、扩展” 四个维度全方位解读 C++ vector 容器。在使用层面,详细介绍了 vector 的定义与初始化方式(如无参构造、拷贝构造、列表初始化等),核心接口的区别(如容量操作中 size 与 capacity、reserve 与 resize 的差异,元素访问中 [] 与 at 的安全效率权衡,修改操作中不同位置增删的效率差异),以及三种遍历方式(下标、迭代器、范围 for)的适用场景。在应用层面,结合 “只出现一次的数字”“杨辉三角”“两数出现一次” 等经典算法题,展示
2025-10-02 15:54:51
1133
1
原创 C++ string类:从使用到实现全解析
C++的string类通过封装字符数组解决了C风格字符串的三大痛点:手动内存管理、安全隐患和操作繁琐。string类提供自动内存扩容、边界检查和丰富的成员接口,同时支持迭代器遍历和运算符重载等便捷操作。文章详细介绍了string类的核心原理、常用接口实现,并手把手指导了自定义string类的模拟实现,包括构造函数、拷贝控制、修改操作等关键功能。通过对比深浅拷贝,分析现代"拷贝-交换"写法,帮助读者深入理解string类的底层工作机制。最后通过完整代码展示了一个功能完备的string类实现
2025-09-26 16:15:06
161
1
原创 深入解析C++内存管理与new/delete机制
本文系统介绍了C/C++内存管理和动态分配机制。主要内容包括:1)内存区域划分(栈、堆、数据段、代码段等);2)C语言malloc/free的局限性和C++改进;3)new/delete操作符原理及与malloc/free的区别;4)底层operator new/delete实现;5)定位new特殊用法;6)常见内存问题解决方案。核心在于阐述C++通过new/delete实现内存分配与对象构造/析构的绑定,以及如何避免内存泄漏等关键问题。文章通过对比分析、代码示例和内存示意图,全面剖析了C++内存管理机制。
2025-09-22 16:42:58
986
1
原创 泛型编程:C++模板深度解析
本文介绍了C++中的泛型编程及其实现方式——模板技术。主要内容包括:1)泛型编程概念,通过类型参数化实现代码复用;2)函数模板的格式、原理(编译时类型推演和实例化)及使用方式(隐式/显式实例化);3)类模板的定义、实例化方法及成员函数实现规范;4)模板技术的实际应用(如通用数据结构和算法)及其相较于C语言实现的优势(类型安全、代码复用、自动管理资源)。文章通过具体代码示例展示了模板在实现通用交换函数、栈数据结构等方面的应用价值。
2025-09-22 12:59:20
1052
1
原创 C++基础知识
-定义:在C++ 中,函数可以返回一个引用。返回引用意味着函数返回的是一个变量的别名,而不是变量值的副本。--语法形式: 类型& 函数名(参数列表)。例如:这里 getElement 函数返回 int 类型的引用,它返回数组 arr 中指定下标的元素的引用。禁止分离定义:内联函数不能将声明和定义分离(如头文件声明、源文件定义),否则会导致链接错误。原因如下:-- 地址缺失:内联函数在调用点直接展开,不会生成独立函数地址--链接冲突。
2025-05-27 13:57:41
701
1
原创 C语言 分支与循环笔记总结
第一次 用xmind写笔记 写的不是很好请见谅 如果又想要这份笔记 可以私信我 我发给你 其中有些图引用了比特鹏哥的图。
2025-02-13 00:43:26
249
原创 我的c语言之路
首先因为大学生活很闲,所以我想学一门技术丰富我的大学生活,然后呢我比较对游戏感兴趣,所以呢我就想通过学习c语言,然后做出一款自己喜欢的游戏。因为我比较喜欢养成类的游戏不过可能目前的缺口可能有点大似乎没有我太喜欢玩的游戏,所以我就想通过自己的努力做一款自己喜欢的游戏。我打算拿出我部分的业余时间来学习c语言,保证一天学习时间差不多三小时左右,认真做好笔记,对书上的内容进行整理,保证自己能在一年内学c语言达到一个不错的水准。我想进的it公司,肯定是越大越好,比如说阿里巴巴,不过可能是痴心妄想,不过我会努力的。
2024-10-15 22:25:32
169
1
编程基础C语言分支与循环结构核心技术解析:条件判断与流程控制语句应用
2025-11-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅