自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 链表存储二进制转十进制

本文介绍了如何通过链表实现二进制转十进制的高效计算。核心思路是采用"边遍历、边计算"的方法,利用公式sum=sum*2+当前节点值逐步转换。文章通过101→5的实例演示了计算过程:初始sum=0,每次循环将之前结果乘以2并加上当前位值,三次循环后得到正确结果5。这种方法只需遍历链表一次,时间复杂度O(n),空间复杂度O(1)。关键点在于理解"每读取一位,前面所有位都要乘以2"的运算逻辑,这与十进制数的读取原理类似,只是将基数10改为2。该算法简洁高效,适合处理任意长度

2026-04-05 11:17:38 383

原创 顺序表与单链表的数据存储差异: 为何顺序表元素用指针,链表节点数据不用?

摘要:顺序表和单链表在指针使用上的差异源于其存储逻辑不同。顺序表的eleType*elements指针用于管理动态连续内存,实现扩容和随机访问;而单链表的eleTypedata直接存储数据,因为链表通过next指针连接离散节点来存储多个元素。顺序表必须用指针管理整块内存,否则无法动态扩容;单链表节点只需存储单个数据,用指针反而增加复杂度。这种设计差异体现了两种数据结构"连续存储"和"离散链接"的不同特性。

2026-03-21 11:23:45 409

原创 C++核心三大特性:封装、继承、多态(初学者入门详解)

本文系统讲解了C++面向对象编程的三大特性:封装、继承和多态。封装通过访问控制实现数据隐藏,保证安全性;继承实现代码复用和功能扩展;多态通过虚函数实现"同一接口,多种实现"。三者关系密切:封装是基础,继承是桥梁,多态是目标。文章通过手机、动物等生活实例和代码示例,直观展示了各特性的应用场景和使用方法,并指出初学者常见误区。掌握这三大特性是写出可维护、可扩展面向对象代码的关键,建议初学者先理解核心思想,再逐步深入细节。

2026-03-03 17:12:58 621

原创 C++ 踩坑实录:成员函数做友元的 “顺序魔咒” 与 “类外实现” 的底层逻辑

声明类型编译器认知程度可用场景不可用场景前置声明(class A;仅知道 “A 是一个类”,不知道内部成员和大小声明指向 A 的指针 / 引用、作为函数参数 / 返回值的指针 / 引用创建 A 的普通对象、访问 A 的成员(变量 / 函数)、声明 A 的友元成员函数完整定义(知道 A 的所有成员、大小、布局所有场景(创建对象、访问成员、友元声明等)无被访问者(Building)需要 “认知” 访问者(GoodGay)的visit()函数,这要求GoodGay。

2025-12-22 21:00:15 656

原创 C++函数高级特性深度解析

本文系统介绍了C++函数的高级特性,包括函数重载、默认参数、内联函数和函数指针等核心概念。重点讲解了函数重载的实现原理与使用规则,默认参数的设置规范,内联函数的优化机制及其与宏定义的区别,以及函数指针在回调机制中的应用。文章通过代码示例展示了各种特性的实际用法,并指出了常见误区与最佳实践。这些高级特性不仅能提升代码的灵活性和效率,也是C++面试的重要考点,为后续面向对象编程打下坚实基础。

2025-12-21 18:34:31 971

原创 C++ 核心编程:引用深度解析

本文全面解析C++引用机制,揭示其作为变量别名的本质及底层指针常量实现。重点阐述了引用的三大特性:必须初始化、不可更换绑定、与原变量共享地址,并详细分析了函数参数传递、返回值优化和数组引用三大核心应用场景。通过对比指针,指出引用在语法简洁性和安全性上的优势,同时列举常见错误及规避方法。文章强调引用在提升效率、简化代码方面的价值,建议优先使用引用替代指针,但需注意生命周期管理。最后总结了引用在函数参数、返回值等方面的最佳实践,为C++开发者提供了实用指导。

2025-12-21 17:14:20 600

原创 C++内存四区与new操作符详解

本文系统讲解C++内存管理的核心知识,包括程序运行的四大内存区域(代码区、全局/静态区、栈区和堆区)及其特性,重点剖析堆区动态内存分配的关键工具new操作符。文章详细对比new与malloc的区别,指出new在类型安全、初始化和异常处理方面的优势,并提供常见错误规避指南。最后强调内存管理的最佳实践:严格遵循配对释放原则、释放后置空指针、优先使用智能指针等现代C++特性。通过掌握内存分区模型和动态内存分配机制,开发者能够编写更高效、稳定的C++代码。

2025-12-21 16:52:45 790

原创 C++ 封装的经典实践:从立方体到点圆关系的面向对象思考

本文通过立方体类和点圆关系两个案例,阐述了C++中封装的核心应用。在立方体类中,通过私有成员变量和公共接口方法实现数据隐藏和行为封装,既保证了数据安全又提供了稳定接口。点圆关系案例则展示了类的组合与封装协作,通过职责分离和接口依赖,实现了代码复用和可维护性。两个案例共同体现了封装的核心价值:数据保护、接口稳定、代码复用和职责清晰。合理的封装将面向过程的逻辑转变为面向对象的组件协作,使代码更健壮、更易扩展,符合"单一职责原则"和"组合优于继承"的设计思想。

2025-12-19 21:00:06 1409

原创 C++栈实现进制转换:从原理到代码

本文详细讲解了利用C++栈实现十进制数向2~36进制转换的方法。通过"除基取余法"的数学原理,栈的LIFO特性完美解决了余数逆序问题。文章提供了完整的代码实现,涵盖负数、0等边界场景处理,并支持高进制字符映射(10-35对应A-Z)。同时分析了std::stack的核心接口使用注意事项,给出测试用例验证,并提出扩展优化思路,如支持更大进制、封装函数等。该案例展示了栈在顺序反转问题中的典型应用,是理解栈和进制转换原理的优质示例。

2025-12-14 19:22:30 1060

原创 栈的两种经典实现:顺序表与单链表栈的原理与使用详解

本文详细介绍了栈的两种实现方式:基于动态数组的顺序表栈和基于头插法的单链表栈。顺序表栈通过数组下标定位栈顶,支持自动扩容,访问速度快但存在内存浪费;单链表栈通过头节点操作实现动态内存管理,无需扩容但访问稍慢。两种实现均遵循LIFO原则,提供push、pop、top等核心操作,区别主要在于存储结构和性能特点。实际应用中应根据元素稳定性和内存需求选择合适方案:数组栈适合元素稳定场景,链表栈更适合内存敏感场景。

2025-10-18 20:38:58 854

原创 链表数值运算的艺术:从 “翻倍” 到 “两数相加” 的进位处理

本文对比分析了两道链表数值运算问题:链表数值翻倍(递归实现)和两数相加(迭代实现)。两者核心都在于进位处理,但实现方式不同:递归解法从低位到高位处理,通过指针传递进位;迭代解法则同步遍历链表,使用虚拟头节点简化操作。关键共性在于:确定运算顺序(低位到高位)、正确处理进位传递、处理边界情况(如最高位进位)。掌握这些思路可有效解决类似链表数值运算问题。

2025-09-27 20:02:10 715

原创 链表操作实战:两种方法删除 “后续有更大节点” 的节点

本文介绍了两种方法解决链表删除问题:递归法和单调栈迭代法。两种方法都基于"从后往前判断"的核心思路,通过比较当前节点与后续节点的值来决定是否保留当前节点。递归法利用系统调用栈实现回溯处理,代码简洁但可能栈溢出;迭代法通过手动维护单调栈实现,性能稳定但代码稍复杂。文章通过示例详细演示了两种方法的执行过程,并对比了它们的优缺点,建议根据链表长度和场景需求选择合适的方法。

2025-09-26 20:19:38 832

原创 【算法实战】用哈希表轻松统计 “最流行的气球颜色”

本文介绍了使用哈希表统计元素出现频率并找出最流行元素的方法。以统计气球颜色受欢迎程度为例,详细讲解了如何通过unordered_map建立颜色到出现次数的映射,实现O(1)时间复杂度的插入和查询操作。文章包含代码分步解析和示例演示,展示了哈希表在分类计数中的高效性,并拓展了其在统计单词频率、用户行为分析等场景的应用。哈希表的核心优势在于无需预知元素范围、操作高效且代码简洁。

2025-09-14 20:43:36 659

原创 单链表反转:递归与迭代的双视角解析

单链表反转是算法经典问题,主要有递归和迭代两种解法。递归法采用分治思想,先反转子链表再调整当前节点指针,代码简洁但空间复杂度O(n)。迭代法通过三指针逐个调整节点指向,空间复杂度O(1)更高效。递归适合短链表,迭代适合长链表。理解两种方法的指针操作和核心思想,能根据场景选择最优解。两种解法时间复杂度均为O(n),但实现思路和适用场景不同。

2025-09-14 19:11:15 1407

原创 单链表去重实战:用哈希表实现高效去重(附代码解析)

本文介绍了一种高效删除单链表重复节点的方法,仅保留首次出现的节点。核心思路是使用布尔数组作为哈希表标记节点值的出现状态,通过一次遍历链表完成去重操作。算法时间复杂度为O(n),空间复杂度O(1)。具体实现包括:处理空链表、初始化哈希表和指针、遍历时判断节点值是否出现过并更新链表、处理链表尾部。该方法适用于节点值范围已知的场景,当值范围未知时需改用unordered_set。

2025-09-13 18:32:48 1342

原创 单链表实战

本文通过两道单链表实战题目,系统讲解了单链表的核心操作与优化技巧。首先介绍了单链表的结构体与类封装设计,重点分析了插入、求和、有序插入等关键操作的实现逻辑。针对链表元素求和,详细讲解了指定位置插入与遍历求和的实现方法;对于有序插入问题,深入探讨了尾部插入复用和升序插入位置查找的优化策略。文章还强调了内存管理的注意事项,并提供了多组数据处理的完整实现方案。通过基础与进阶操作相结合的方式,帮助读者全面掌握单链表的实战应用技巧。

2025-09-08 20:26:24 843

原创 深入浅出 C++ 选择排序:原理、实现

本文介绍了选择排序算法的原理与C++实现。选择排序通过每次从待排序区间选取最小元素交换到起始位置实现排序,时间复杂度为O(n²),空间复杂度O(1)。文章详细演示了排序过程,提供了完整的C++代码示例,并分析了算法特点:简单直观但效率较低,适合小规模数据排序。最后指出该算法适用于数据量小且对空间要求严格的场景。

2025-09-04 20:40:13 568

原创 单链表的基本操作

本文实现了一个单链表类,包含插入、删除、查找、修改和打印等基本操作。链表节点包含数据域和指针域。类方法包括:insert()在指定位置插入节点,remove()删除节点,find()按值查找,get()按索引查找,update()修改节点值,print()打印链表。代码使用异常处理非法位置,并包含内存管理。测试代码演示了链表的插入和删除操作。

2025-09-03 20:47:54 323

原创 特大数字求和

本文介绍了如何通过字符串处理实现大数加法运算。针对无法用常规整型存储的超长数字(长度≤1000位),文章提出将数字作为字符串处理的方法。给出了C++实现代码,包括从右到左逐位相加、处理进位、最后反转结果字符串等关键步骤。代码还规范了输出格式,确保每个测试用例之间有空行分隔。该方法解决了基本数据类型无法处理超大整数运算的问题,适用于需要进行大数相加的场景。

2025-08-25 19:47:22 329

原创 刷题总结:二进制置位相关的两道算法题解法与思路拓展

本文介绍了两个基于二进制位运算的算法问题及解法。1. K置位下标元素和:通过遍历数组,统计每个下标二进制形式中1的个数(x&1和x>>=1运算),若等于k则累加对应元素值。2. 重复数字异或值:利用visited位标记数字出现状态,通过异或运算(^)和位操作(1<<x)高效识别重复数字并计算异或结果。全文突出位运算在算法中的三大优势:高效性(快速处理)、简洁性(减少代码量)和独特性(精准解决二进制相关问题),展现了二进制运算在优化算法中的核心价值。

2025-08-24 19:38:08 778

原创 vector 实战指南:一维数组存储与二维数组操作全解析

vector是 C++ 中处理动态数组的 “瑞士军刀”,它结合了静态数组的高效访问和动态内存管理的灵活性,几乎适用于所有需要存储序列数据的场景。掌握vector的使用是学习 STL 和编写高效 C++ 程序的基础。

2025-08-17 23:02:02 726

原创 顺序表在代码中的运用

本文介绍了两种合并有序序列的方法。方法一使用vector的insert函数将两个序列合并后排序,代码简洁但效率较低(O(nlogn))。方法二采用双指针法,利用序列已有序的特性,线性时间(O(n))完成合并,效率更高。文章对比了sort和merge的适用场景,指出对有序输入应优先使用merge或双指针法,避免不必要的排序开销。两种方法都提供了完整的C++实现代码,并解释了关键语句的作用。

2025-08-16 22:06:28 964

原创 C++算法整理

本文介绍了顺序表的基本操作实现。通过C++代码演示了顺序表的初始化、销毁、插入、删除、查找、获取和修改等核心功能。顺序表采用动态数组实现,支持自动扩容(当容量不足时扩大为原容量两倍)。代码包含完整的异常处理机制,确保操作合法性。主函数示例展示了顺序表的创建、元素插入、删除、修改和查找等操作,并输出结果验证功能正确性。该实现提供了顺序表这一线性数据结构的基础操作模板,可作为学习数据结构的参考实例。

2025-08-14 22:28:56 277

原创 C++代码练习笔记整理(一)

本文介绍了三个常见的编程问题解决方案:1.回文数判断:通过将数字转换为字符串,比较首尾字符来验证回文数;2.十进制转八进制:采用取余法逐位计算并加权组合;3.阶梯式金币求和:通过阶段划分计算完整阶段和剩余天数的金币总和。每个方案都提供了完整的C++实现代码,并解释了关键算法逻辑。这些示例展示了字符串处理、进制转换和数学建模的典型编程应用。

2025-08-14 22:20:30 257

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除