- 博客(58)
- 收藏
- 关注
原创 二叉树专题(一):从递归判断到子树匹配与遍历建树
本文从基础接口进入二叉树刷题实战,通过单值二叉树、相同的树、另一棵树的子树、前序遍历返回数组、前序串建树五道经典题目,逐层拆解递归判断逻辑。文中对比 && 与 || 的适用场景、双树同步递归写法、结果收集型递归实现,复盘递归返回值丢失、参数错误等典型错题,帮你从 “会写递归” 到 “写对递归”,建立系统化的二叉树递归解题思维。
2026-08-29 00:15:48
190
原创 数据结构-二叉树(五):查找、销毁与前序序列建树
本文承接链式二叉树的遍历与统计基础,补充三个核心接口实现:递归查找目标结点、二级指针后序销毁整棵树、基于带 #标记的前序序列还原二叉树。文中拆解每个接口的递归逻辑,详解二级指针销毁的必要性、递归返回值不可丢弃、下标指针替代静态变量等关键细节,梳理三种典型递归模式,帮你夯实二叉树递归底层逻辑,避开 C 语言指针与递归的高频踩坑点。
2026-08-28 23:57:52
306
原创 数据结构-二叉树(四):链式结构与递归遍历|前中后序 + 层序遍历 + 结点统计与高度
本文开启二叉树链式结构的学习,对比数组存储的缺陷,讲解二叉树结点的指针式设计。重点拆解前序、中序、后序三种深度优先递归遍历,以及基于队列的层序广度优先遍历。实现结点总数、叶子结点、树高度、第 K 层结点数等经典递归接口,对比多种计数写法,点明递归重复计算的性能陷阱,帮助理解二叉树分治递归的核心思维,配套完整可运行 C 语言代码。
2026-08-27 23:25:43
340
原创 数据结构-二叉树(三):堆复杂度证明与 Top-K 问题|错位相减推导 + 海量数据内存优化
本文围绕二叉堆展开,针对很多同学的疑惑:堆单次调整为 O (logN),为什么向上、向下两种建堆方式复杂度却截然不同。借助满二叉树模型,使用错位相减完成严谨数学推导,拆解两者性能差距的根源。同时结合经典 Top‑K 问题,模拟内存不足的海量数据场景,讲解小根堆筛选前 K 大元素的原理,并给出可直接运行的 C 语言流式测试代码,附带自动化结果校验,帮助理解堆在工程中的实际价值。
2026-08-26 23:42:45
333
原创 数据结构‑二叉树(二):二叉堆从零实现|Heap结构设计 + 建堆优化 + 堆排序深度解析
本文承接二叉树专题,深入解析数据结构中的核心结构——二叉堆。从完全二叉树的数组映射出发,结合C语言实现完整堆接口,详细讲解结构体设计、指针传参原因、向上调整与向下调整原理,以及大小根堆切换方法。通过图解对比向上建堆与向下建堆,分析O(NlogN)与O(N)复杂度差异,并深入拆解堆排序、“降序建小堆,升序建大堆”的核心思想。最后结合测试案例,总结Top-K、优先级队列等实际应用与常见踩坑。
2026-08-24 00:27:25
330
原创 嵌入式-51单片机入门(三)-数码管驱动:从单管点亮、多位扫描到动态刷新与消隐原理
本文系统讲解了数码管驱动原理与技术演进,从单管点亮到多位数码管动态扫描的完整实现过程。文章首先解析了数码管的基本原理,包括共阴/共阳结构、段码表生成和硬件电路架构;然后通过单管驱动案例揭示了初学者常见的认知误区;重点剖析了多位数码管动态扫描中的鬼影问题及其消隐时序解决方案;最后对比了直接扫描与专用驱动芯片两种方案的优劣,并提出了定时器中断、显示缓冲区等工程优化方向。全文贯穿了嵌入式开发的核心思想:IO复用、时间分片、时序控制和硬件卸载,为读者构建了从基础实验到实际项目的技术路径。
2026-08-23 01:04:54
425
原创 C语言底层:函数栈帧的创建与销毁(二)|深入理解函数栈帧
本文深入讲解C语言函数栈帧的底层原理,结合VS2022 x86 Debug纯净调试环境,从环境配置、CRT调用链拆解到逐指令实战,完整还原main与自定义函数的栈帧创建、参数压栈、函数跳转、栈帧销毁全流程。文章解答了局部变量创建、未初始化随机值来源、形参实参关系、函数调用与返回机制等核心疑问,无需死记汇编指令,掌握核心逻辑即可吃透函数调用本质,为递归、指针等后续内容打下扎实的底层基础。
2026-08-21 17:58:43
343
原创 数据结构-二叉树(一):树的基础概念与二叉树核心结构
本文是二叉树数据结构的入门指南,首先介绍了树的基本概念和核心特点,包括根节点、子节点、层次等术语。然后重点讲解了二叉树的特殊结构和两种常见类型:满二叉树和完全二叉树。文章详细阐述了二叉树的五大核心性质,特别是完全二叉树在顺序存储中的父子节点定位公式。最后对比了顺序存储和链式存储的适用场景,并引入堆结构的概念及其应用。全文为后续深入学习二叉树算法奠定了理论基础,强调理解底层原理而非机械记忆代码。
2026-08-20 23:59:05
300
原创 C语言底层:函数栈帧的创建与销毁(一)|从汇编视角看懂函数调用的本质简述
本文深入解析了C语言函数栈帧的创建与销毁机制。通过一个简单的Add函数示例,详细演示了函数调用的完整过程:从main函数栈帧初始化、参数压栈(从右向左)、call指令保存返回地址,到Add函数栈帧创建、执行计算,再到返回值通过寄存器传递、栈帧销毁恢复现场。文章揭示了局部变量存储、未初始化变量随机值来源、形参与实参关系等核心问题的底层原理,并指出理解栈帧机制对掌握递归、函数调用约定等高级概念的基础性作用。基于VS2022 x86 Debug环境讲解,后续将补充汇编调试和内存布局等可视化内容。
2026-08-20 23:10:52
328
原创 栈和队列专题(四):LeetCode 232. 用栈实现队列|双栈分工 + 按需迁移 + 摊还 O(1)
本文讲解LeetCode 232「用栈实现队列」的经典双栈方案,明确inStack负责入队、outStack负责队头操作的分工模式,重点解析“仅outStack为空时整体迁移”的核心规则,以及pop复用peek的代码优化写法,深入拆解摊还O(1)的复杂度原理。文中横向对比了225、622两道同类题的差异,体现栈模块的工程复用价值。至此栈队列三道核心实现题梳理完毕,后续将开启二叉树专题,栈队列经典应用题也会继续跟进练习。
2026-08-20 01:10:05
344
原创 栈和队列专题(三):LeetCode 622. 设计循环队列|数组环形复用 + front/rear 边界详解
本文详细讲解了循环队列的设计与实现,重点分析了如何利用数组实现环形结构以避免空间浪费。文章首先通过示例说明普通数组队列的"假溢出"问题,然后提出循环队列的解决方案。核心内容包括:1. 采用牺牲一个存储位置的方案区分队列空满状态;2. 明确front和rear指针的语义(front指向队首元素,rear指向下一个可插入位置);3. 使用取模运算实现下标的循环移动。文章完整实现了LeetCode 622题要求的全部接口,并分析了各种边界情况,特别是队尾元素的获取方法。最后对比了数组实现与链式
2026-08-20 00:56:09
491
原创 栈和队列专题(二):LeetCode 225. 用队列实现栈 | 双链表队列从零实现 + 完整做题复盘
本文介绍了如何使用两个队列实现栈的基本操作(push、pop、top、empty)。通过维护一个关键不变量——始终保持一个队列存数据、另一个为空,解决了队列FIFO与栈LIFO的特性矛盾。核心思路是在pop和top操作时,将前n-1个元素转移到空队列,保留最后一个元素作为栈顶。文章详细对比了初始实现与优化写法,分析了时间复杂度(push为O(1),pop/top为O(N)),并指出常见错误(如队列清空时指针处理不当)。最后提及单队列实现方案,强调数据结构特性转换的算法价值。代码已开源。
2026-08-19 00:42:32
348
原创 数据结构-栈和队列(二):C语言链式队列完整实现|结构设计 + 代码 + 复盘 + size 成员深度解析
本文详细介绍了链式队列的实现原理与优化技巧。通过对比顺序表实现队列的缺陷,阐明单链表+尾指针方案的高效性(入队/出队O(1))。重点解析了front/rear双指针与size成员的设计价值,后者可将长度查询从O(N)优化至O(1)。文章提供模块化代码实现,包含初始化、入队、出队等核心操作,特别强调边界处理(空队列和单节点场景)。附有典型错误案例复盘和完整测试用例,测试覆盖队列各种状态转换。所有代码已开源,采用头文件与实现文件分离的规范写法,可直接编译调试。
2026-08-17 23:36:47
324
原创 栈和队列专题(一):LeetCode 20. 有效的括号
本文介绍了使用栈数据结构解决括号匹配问题的经典方法。题目要求判断一个仅包含括号的字符串是否有效,即所有括号都能正确闭合且顺序匹配。解题思路是利用栈的LIFO特性,遇到左括号压栈,遇到右括号与栈顶元素匹配,匹配成功则弹栈,最终检查栈是否为空。文章提供了C语言手动实现顺序栈的完整代码,包括初始化、入栈、出栈等操作,以及C++使用STL stack的简洁实现。关键点包括正确处理边界条件、内存管理和时间复杂度分析(O(n)),并总结了常见错误。通过此题可深入理解栈的基本原理和应用场景。
2026-08-16 23:33:14
186
原创 数据结构-栈和队列(一):C语言手写顺序栈|两种 top 约定 + 接口封装详解
栈是操作受限的线性表,遵循后进先出 LIFO 原则。本文使用 C 语言实现动态顺序栈,重点讲解两种主流 top 标记约定:`top=0`指向待插入位置与教材常用`top=-1`指向栈顶元素。提供两套完整源码,头文件接口统一,编译需二选一。对比两套实现的边界条件,梳理入栈、出栈易错点,讲解接口封装思想,说明应当调用封装函数而非直接访问结构体成员。配套测试用例验证接口,理解栈扩容逻辑,为后续队列学习铺垫基础。
2026-08-15 21:50:49
716
原创 数据结构基础篇(二):顺序表与链表全方位对比|从内存布局到 CPU 缓存理解底层差异
顺序表和链表的本质差异在于内存连续性。顺序表(动态数组)物理内存连续,支持O(1)随机访问,CPU缓存利用率高,但扩容需拷贝;链表节点离散存储,插删灵活但访问需遍历,且内存碎片和缓存不友好导致实际性能较差。虽然链表的“插删O(1)”需已知节点位置,但多数场景下顺序表因缓存和遍历优势更受青睐。理解硬件层面的内存与缓存机制,才能在实际工程中选择合适的数据结构,例如栈优先用数组实现。数据结构的选择本质是时间、空间与灵活性的权衡。
2026-08-15 21:20:03
459
原创 单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
本文详细解析了LeetCode138「随机链表的复制」这道经典链表题目。作者从单链表的基础操作出发,分析了加入random随机指针后带来的挑战,重点介绍了原地拷贝法的三步实现:1)在原节点后插入拷贝节点建立映射;2)利用映射关系修正random指针;3)拆分混合链表为独立的两条链表。文章提供了完整的AC代码和关键细节分析,包括指针操作的常见错误和复杂度分析,特别强调了链表操作中保持结构清晰的重要性。该解法时间复杂度O(N),空间复杂度O(1),通过巧妙利用原链表结构建立映射关系,避免了哈希表的额外空间消耗。
2026-08-14 23:42:35
547
原创 嵌入式-51单片机入门(二)-独立按键控制LED:从亮灭、状态切换到二进制显示与左右移位
本文基于51单片机实验,从按键控制LED的基础操作逐步深入,实现按键消抖、状态切换、二进制显示及LED移位控制。通过四个实验(独立按键控制亮灭、状态切换、二进制显示、双键控制移位),将C语言的if判断、位运算、函数封装等基础语法映射到硬件交互中。实验中因代码复用未完全修改端口号(如while(P3_1==0)误用为P3_0),导致按键触发异常,凸显了代码检查的重要性。总结发现,单片机开发的核心在于将已有C语言知识(如自增、移位运算)转化为硬件行为,实现人机交互的初步逻辑。
2026-08-14 01:01:58
336
原创 单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
本文复盘单链表四道经典面试题:倒数第 k 个节点、回文链表、相交链表与环形链表 II,系统梳理定距双指针、快慢指针、原地反转和长度对齐等核心思路,并分析时间、空间复杂度。重点结合手写笔记推导 Floyd 判环中“为何必然相遇”与“为何第二次相遇即为入环点”,最后补充通用步长与贝祖定理拓展,帮助从会写代码进一步理解算法原理。
2026-08-13 23:18:14
598
原创 嵌入式-51单片机入门(一):从点亮第一盏LED开始
摘要:本文记录了作者从零开始学习51单片机的入门过程。通过完成点亮LED、LED闪烁、流水灯和渐变加速流水灯四个基础实验,作者初步掌握了IO口控制、电平概念、软件延时等嵌入式开发基础知识。文章详细介绍了每个实验的代码实现和硬件原理,特别强调了从软件思维到硬件控制的转变体验。作者分享了自己从去年看不懂教程到如今能理解硬件编程的心路历程,体现了前置知识对学习的重要性。这些实验为后续学习独立按键、数码管、定时器等外设打下了基础,也开启了作者从纯软件向嵌入式领域的探索之路。
2026-08-13 00:56:54
499
原创 数据结构基础篇(一):时间与空间复杂度|时间/空间复杂度 + 两道力扣练习 + 二分查找复盘
本篇记录数据结构学习进入复杂度分析阶段后的学习复盘。从时间复杂度、空间复杂度的基本概念出发,结合 LeetCode「消失的数字」「旋转数组」两道题,分析不同解法背后的效率差异;同时复习二分查找,通过区间开闭、循环条件和边界更新的对应关系,进一步理解 O(logN) 算法的实现细节。本文不仅总结复杂度分析方法,也记录从“代码能跑”到“关注效率”的思维转变。
2026-08-11 20:45:10
402
原创 数据结构-双向循环链表
本文记录了作者实现带哨兵位的双向循环链表的过程与踩坑经验。文章重点不在于展示完美代码,而是通过实际开发中遇到的五个典型问题(打印错误、指针传参错误、删除逻辑错误、误删哨兵节点、销毁函数崩溃),逐步分析调试过程。每个问题都配有详细解释和修复后的正确代码,最终形成功能完整的实现。作者强调理解指针操作和链表连接关系的重要性,并分享了从"代码能跑"到"代码规范"的优化过程,附有完整代码仓库链接。
2026-08-10 01:25:12
405
原创 单链表专题(二)-刷题复盘篇:四道经典题踩坑记录+多思路对比
这篇文章总结了作者在刷链表和数组相关算法题时的经验与心得。四道题目分别是合并有序数组、反转链表、合并有序链表和分割链表,均围绕双指针思想展开。作者详细记录了每道题的解题思路、踩坑点和优化过程,如数组合并需从后往前操作避免覆盖、反转链表需先保存后继节点防止断链、分割链表后需切断尾部避免成环等。文章强调算法不是越花哨越好,思路朴素但边界清晰的写法往往更实用,并总结了链表题的通用避坑口诀:修改指针前保存后继、善用虚拟头节点、重组后处理尾部指针等。通过反复实践,作者逐渐建立起对指针操作的直觉,为后续进阶题打下基础。
2026-08-06 00:47:15
338
原创 从技术学习到项目管理:一名软件工程学生负责“星光守护计划”的实践记录
作为一名软件工程专业学生,我以实践团队负责人身份参与“星光守护计划”暑期社会实践,带领团队开展为期17天的乡村儿童关爱项目。本文从需求分析、方案设计、团队协作和成果沉淀等方面记录实践过程,结合软件工程中的项目管理理念,思考如何通过调研、反馈和优化解决真实需求。实践不仅提升了我的组织协调能力,也让我进一步理解了“以用户需求为核心”的项目思想。
2026-08-05 14:29:15
188
原创 C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
本仓库为C语言数据结构线性存储结构的专项学习项目,完整记录了从基础概念到实际应用的开发流程。主要内容包括:1)动态顺序表的全套接口实现与通讯录管理系统开发,涵盖初始化、增删改查、扩容销毁等核心功能;2)单链表的基础操作实现与对比分析;3)真实项目开发中的问题调试经验,如输入缓冲区处理、字符串匹配优化等。项目提供完整源码、可执行文件及详细学习记录,特别适合C语言初学者系统学习数据结构。通过本项目可掌握线性表的两种存储方式差异,提升工程化编程能力。
2026-07-14 00:07:47
240
1
原创 单链表专题(一)-应用篇:三道经典题吃透删除、反转与快慢指针
本文系统讲解单链表三大经典问题:移除元素、反转链表和查找中点。针对移除元素提出尾插法和虚拟头节点两种解法;反转链表详细解析三指针迭代和递归两种实现;查找中点重点分析快慢指针算法。文章强调单链表操作的核心在于指针修改和边界处理,总结出通用解题框架:处理头节点变化需采用新链表或虚拟头节点、修改指针前必须保存后继节点、必须验证空链表等边界场景。通过这三道基础题的深度剖析,帮助读者掌握单链表的核心操作与解题思路,为后续进阶题目打下坚实基础。
2026-07-13 23:00:07
395
原创 数据结构 - 单链表(二):单链表进阶操作
本文详细讲解单链表的进阶操作,包括指定位置后插/前插、删除指定节点/后继节点以及链表销毁等。核心要点包括:1.插入操作必须遵循"先连后继再改前驱"的铁则,避免断链;2.前插和删除当前节点需遍历查找前驱节点;3.删除操作需先保存节点地址再释放内存;4.销毁链表时要逐个释放节点并将头指针置NULL。文章通过代码示例和测试案例,分析各类操作的时间复杂度(后插O(1)、前插O(n)),并总结链表操作的通用方法论,强调指针操作顺序和边界条件处理的重要性,为后续学习更复杂数据结构奠定基础。
2026-06-13 11:54:15
411
原创 数据结构 - 单链表(一):单链表基础操作
本文详细讲解了C语言单链表的基础操作实现,包括头插、尾插、头删、尾删和查找等核心功能。通过结构体定义、辅助函数封装和具体操作实现三个层面,剖析了单链表的设计思路与编码要点。重点阐述了二级指针在头插/头删中的必要性、尾操作的前驱节点处理、边界条件判断等关键问题,并提供了通用编程方法论:二级指针判断法则、遍历临时指针使用、删除先保留原则等。文中包含完整测试代码和运行结果,帮助读者系统掌握单链表的实现原理和工程实践技巧,为后续学习更复杂的链表操作奠定基础。
2026-06-13 11:44:16
420
原创 C 语言(十四):系列终章|编译与链接 + 预处理
这篇文章总结了C语言从源代码到可执行程序的完整编译流程(预处理、编译、汇编、链接),重点讲解了预处理阶段的#define宏定义、条件编译、头文件包含等关键机制。作者结合自身9个月的C语言学习经历,分享了从基础语法到数据结构实践的学习心得,并指出理解内存和指针等底层概念的重要性。最后,作者表示将转向C++学习,认为C语言的基础知识为后续学习奠定了坚实基础。全文既是技术总结,也体现了编程学习的思维转变过程。
2026-06-06 23:02:05
447
原创 从零开始学 C++|系列开篇:从 C 到 C++ 的衔接之路
本文分享作者从C语言转向C++的学习经验。作者认为C++本质是C语言的升级版,通过具体代码示例(如命名空间、输入输出、函数重载等)展示了C++的核心特性。文章强调动手实践的重要性,并提供了学习方法建议:跟随课程+自主练习+写博客总结+结合数据结构实践。最后推荐了cppreference等学习资源,鼓励读者循序渐进地掌握C++,指出已有C语言基础会让学习更轻松。全文以实践为导向,适合刚接触C++的初学者参考。
2026-06-06 22:13:19
476
原创 C 语言通讯录补坑篇:终版遗留 Bug 修复,解决修改姓名输入错乱问题
本文是C语言通讯录终版的补坑记录,针对5月25日测试发现的**修改姓名输入错乱Bug**进行复盘与修复。问题根源为输入工具函数重复清空缓冲区,导致用户输入被意外吞噬。文中拆解错误逻辑,重构输入函数,移除冗余缓冲区清理代码,同时通过备份结构体原始数据、添加const修饰优化代码规范性。经多组用例测试,功能恢复正常。本次问题也总结了C语言`scanf`与`fgets`混用的缓冲区处理经验,为新手规避同类输入问题提供参考。
2026-05-28 14:38:38
413
原创 C 语言通讯录(终版)|新手踩坑全总结 + 最终可运行代码博客简介
本文介绍了C语言通讯录项目的终版实现,通过三篇系列文章完整闭环:基础版实现增删查改和文件存储,优化版修复核心bug并新增多条件查找等功能,终版进行代码规范重构和全bug修复。项目采用标准C语言分文件写法,包含头文件声明、功能实现和主程序入口。重点解决了输入异常处理、回车跳过修改、重名校验等常见问题,新增了自动保存、多条件查询等实用功能。通过该项目,开发者可以掌握结构体使用、顺序表实现、文件操作等C语言核心技能,以及调试技巧和工程组织方式。
2026-05-21 16:02:18
218
原创 数据结构 - 线性表(四):C 语言通讯录优化升级全记录(踩坑 + 思考)
本文记录了作者对基础版通讯录系统的优化过程。针对输入汉字死循环、修改体验差、查找功能单一等痛点,作者按照优先级逐步优化:首先解决输入汉字导致的死循环问题,通过清理输入缓冲区实现;其次改进修改功能,支持回车跳过无需修改的字段;然后扩展查找功能,支持按电话/地址多条件查找;最后优化性别输入,支持0/1快捷输入。文章详细记录了每个问题的分析过程、解决方案和代码实现,包括输入缓冲区处理、fgets函数应用、字符串比较优化等关键技术点。通过这一系列优化,通讯录系统从基础功能升级为实用工具,大幅提升了用户体验。
2026-05-21 15:33:13
638
原创 数据结构 - 线性表(三):基于顺序表实现 C 语言通讯录(基础功能篇)
本文记录了基于动态顺序表实现简易通讯录的开发过程。作者详细还原了开发中遇到的典型问题:头文件循环包含(通过前向声明解决)、数据类型不匹配导致乱码(修正scanf格式符)、文件不存在导致崩溃(增加错误处理)、输入缓冲区问题等。最终实现的基础版通讯录支持联系人增删改查和数据持久化功能,但仍存在输入校验不足、代码冗余、用户体验差等问题。文章总结了新手常见错误,如头文件组织、数据类型匹配、文件操作容错等关键点,为后续优化版本奠定了基础。
2026-05-21 14:42:37
422
原创 数据结构 - 线性表(二):动态顺序表进阶接口实现
本文详细介绍了动态顺序表的进阶实现,重点讲解了四个核心接口:指定位置插入(SLInsert)、指定位置删除(SLErase)、按值查找(SLFind)和按位置修改(SLModify)。文章通过代码示例展示了各接口的实现原理,特别强调了边界条件的处理(如插入/删除时的下标校验)和常见错误(如元素移动方向错误)。同时提供了完整的多文件实现方案,包括头文件声明、功能实现和测试用例。最后总结了顺序表实现的关键要点,包括断言防护、元素移动规则和工程化编码规范,为后续基于顺序表的实战项目(如通讯录系统)打下基础。
2026-05-19 18:48:01
492
原创 数据结构-线性表(一)
本文分享了作者二刷数据结构顺序表的学习心得与实践经验。文章首先分析了重学顺序表的原因:第一次学习时C语言基础不扎实,导致理解不透彻。作者通过手写代码、调试排错、优化封装的方式,实现了动态顺序表的核心功能,包括初始化、扩容、头尾增删等操作。文中详细记录了5个典型Bug及修复过程,重点介绍了通用打印函数的优化实现,通过宏定义使代码适配不同数据类型。最后展示了多文件工程化拆分方案和完整代码实现,并制定了后续学习计划。作者强调数据结构学习要注重基础、手写代码和工程规范,避免盲目追求进度。
2026-05-16 20:40:33
454
原创 C语言(十三):文件操作全攻略-从基础读写到随机访问与缓冲区原理
本文系统讲解C语言文件操作全流程,从数据持久化的必要性出发,详解二进制与文本文件的区别,以及fopen/fclose的正确用法与12种打开模式。重点介绍字符、字符串、格式化、数据块四类顺序读写函数,对比易混淆的scanf/fscanf/sscanf系列。同时深入解析随机读写、文件缓冲区原理,纠正feof误用等常见误区,最后总结文件更新模式的差异与最佳实践,帮你避开坑点,掌握数据持久化核心技能。
2026-05-10 23:28:59
419
原创 C 语言(十二):动态内存管理全解析-从基础函数到柔性数组与内存分区
本文系统讲解了C语言动态内存管理的核心知识。主要内容包括:四大内存分配函数(malloc、free、calloc、realloc)的使用方法和注意事项;六种常见内存错误及避坑指南;四道经典面试题解析;C99柔性数组的特性与优势;以及C/C++程序的内存分区模型。重点强调了动态内存分配的必要性、正确使用方法和"谁申请谁释放"的核心原则,帮助开发者掌握这一关键技能,避免内存泄漏等问题。
2026-05-10 23:13:47
543
原创 从 AC 到优雅:C 语言经典 OJ 题《潜伏者》代码优化全记录
本文介绍了一道字符串映射题的代码优化过程。文章从初学者常见的AC代码出发,指出其存在变量命名混乱、冗余参数、无效计算等问题。通过5个优化步骤:语义化命名、删除冗余参数、简化布尔判断、优化输出逻辑和精准注释,将代码改造成规范、易读、高效的版本。优化后的代码保持了原有逻辑,但可读性和维护性显著提升。文章最后给出4条建议:先确保正确再优化、重视命名规范、消除冗余代码、精准注释。本文通过具体案例展示了如何在不改变核心逻辑的前提下,写出更优雅的代码,适合编程初学者学习代码优化的方法和思路。
2026-04-21 21:36:35
363
原创 清明杭城独行记:生辰赴江南,于山水与锋芒间见成长与前路
摘要 清明时节,作者选择以一场独行杭州之旅作为自己的特殊生日礼物。在西湖畔感受"淡妆浓抹总相宜"的江南韵味,在雷峰塔顶体会"一眼越千年"的历史厚重,又在钱江世纪城遇见现代杭州的科技锋芒。这场独处之旅不仅让作者领略了杭州"古韵与新潮共生"的城市魅力,更完成了与自我的深度对话——独行不是孤单,而是磨练;生日不必喧闹,静思更有意义。旅途中的所见所感,终将化为成长的底气,激励作者继续奔赴理想与山海。
2026-04-10 00:28:20
403
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅