- 博客(9)
- 收藏
- 关注
原创 9.数据结构哈夫曼树期末考试速览
摘要:哈夫曼树是一种带权路径长度(WPL)最小的最优二叉树,其核心特点包括:没有度为1的结点、权值越大的叶子离根越近、采用贪心算法构建。构建过程需反复合并权值最小的两个结点,最终形成2n-1个结点的树(n为叶子数)。关键考点包括概念判断、WPL计算、结点数量关系(总结点数=2n-1)和哈夫曼编码(最优前缀编码)。易错点在于合并顺序和仅计算叶子结点的WPL。哈夫曼编码遵循左0右1规则,广泛应用于数据压缩。
2025-12-17 16:22:04
498
原创 8.什么时候用 malloc?核心场景梳理
摘要: malloc用于动态内存申请,核心使用时机包括:1)运行时才能确定内存大小;2)需要跨函数共享数据;3)需动态扩容;4)创建超大内存避免栈溢出。静态内存适用于固定大小、局部使用的场景。使用malloc必须检查返回值、及时free释放并置空指针,避免内存泄漏和野指针。判断标准:内存大小是否运行时确定、是否需要跨函数持久化或扩容,满足任一条件则使用malloc,否则优先静态内存更高效。
2025-12-03 16:06:28
872
原创 7.从零学栈:一篇搞懂原理、操作和应用场景
本文以通俗类比和极简代码,详解栈“先进后出”的核心特性,涵盖本质定义、3个核心操作、两种实现方式与4个经典应用场景,附可直接运行的C语言数组栈实现,助力新手快速掌握栈的基础用法。
2025-12-01 19:53:42
891
原创 6. 操作系统核心:进程与线程的深度解析(从概念到实战)
本文系统介绍了操作系统中的进程与线程概念及其实现。首先阐述了进程作为资源分配基本单位的特性,包括独立性、动态性和并发性;然后讲解了线程作为CPU调度单位的轻量级特性及其优势。文章通过C语言实例详细演示了fork()创建进程和pthread创建线程的方法,并对比了二者的差异:进程拥有独立资源而线程共享资源,进程创建开销大而线程开销小。最后展示了进程间通信的管道实现,帮助读者全面理解操作系统并发机制的核心概念与应用实践。
2025-11-27 20:02:54
100
原创 5. 算法初尝:让我做你的第一个动态规划demo,好吗?
动态规划解决"打家劫舍"问题:不能偷相邻房屋,状态转移方程value[i] = max(value[i-1], value[i-2]+nums[i]),时间/空间复杂度O(n)。
2025-11-27 16:34:30
241
原创 4.轻量化编译:windows环境使用MinGW-w64 生成 DLL 全攻略
在windows11/10使用MinGW-w64 (gcc平台)编译Windows DLL的完整教程,涵盖环境配置、编译命令、C/C++调用验证及Python跨语言调用,附实操截图和常见问题解决方案。
2025-11-26 10:06:02
989
原创 3.零 BUG 实现双链表插入(含段错误 / 内存泄漏修复)
本文详细讲解了双链表插入操作的实现方法。首先介绍了双链表节点的ADT定义,然后分别阐述了三种插入场景:头插(链表为空/非空)、中插(中间位置)和尾插(链表末尾)。每种场景都配有示意图和对应的C语言代码实现,包括边界检查、内存分配和指针操作等关键步骤。最后汇总成一个完整的双链表插入函数,并展示了GCC编译运行的结果。文章通过清晰的代码注释和图示,帮助读者理解双链表插入操作的核心逻辑和实现细节。
2025-11-26 03:50:21
289
原创 2.单链表vs双链表:双链表的优越性在浏览器的体现
浏览器历史记录使用双链表而非单链表,关键在于双向访问能力。单链表只能单向遍历,实现后退功能需从头查找(时间复杂度O(n)),而双链表通过prev指针直接访问前驱节点(O(1))。虽然双链表占用稍多内存,但显著提升了操作效率,尤其适合需要频繁前后导航的场景(如浏览器历史、播放器)。性能对比显示,双链表在插入删除和双向访问上均具优势,是权衡空间与时间效率后的更优选择。
2025-11-25 18:24:51
734
原创 1. C语言头文件包含:尖括号<> 与 引号““ 的完全指南
本文详细解析C语言中#include <>和#include ""的区别与使用场景。尖括号<>用于标准库和系统头文件,编译器会直接搜索系统目录;引号""用于自定义头文件,会先搜索当前目录再查找系统路径。文章通过流程图、对比表和实际项目示例说明两者的搜索机制,指出常见错误用法并给出最佳实践建议:系统头文件用<>,自定义头文件用""。掌握这一规则可避免头文件包含错误,提高代码规范性。
2025-11-25 18:06:31
954
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅