- 博客(10)
- 收藏
- 关注
原创 二叉树:从树的概念及递归思维到链式二叉树代码实现,一篇讲透
这篇文章全面介绍了二叉树的基本概念、性质及特殊类型,为后续链式二叉树的实现奠定理论基础。 摘要要点: 树的基本概念与递归特性:明确定义树结构,强调其递归本质,分析节点间关系与属性(度、层次、高度等) 二叉树核心知识: 定义:每个节点最多两棵子树的有序树结构 特殊类型:满二叉树(每层节点数最大)、完全二叉树(最后一层连续排列) 重要性质:包括节点数量与高度的关系、叶子节点与度为2节点的数量关系 数学推导:通过等比数列公式计算不同树型的最大节点数,证明关键性质 文章采用图文结合方式,包含大量示例图和公式推导,适
2026-07-26 22:49:49
525
33
原创 妙用位运算:解构汉明距离至100%(提供分析与多解)
本文以 LeetCode 461. 汉明距离为例,深入探讨了二进制位运算在算法中的应用。文章首先介绍了二进制计算的基础知识,包括位操作符、移位操作符和进制转换。随后详细解析了三种计算汉明距离的解法:1)基于右移操作的逐位遍历统计;2)利用 Brian Kernighan 算法消除最低位 1 的优化遍历;3)采用掩码分治统计的并行计算法,时间复杂度可达 O(1)。通过对比三种解法的核心思想、优缺点,展现了算法从直观到极致的演进路径,帮助读者理解位运算的数学之美及其在计算机底层的高效实现。
2026-07-08 22:55:01
606
29
原创 数据结构堆 & 优先队列的概念、实现及应用场景
本文介绍了堆(Heap)这一基础数据结构的概念、实现原理及代码实现。堆分为大根堆和小根堆,基于完全二叉树的性质,通常使用数组存储。文章详细讲解了堆的数组表示方法、核心操作(如插入、删除)及其辅助函数(向上和向下调整算法),并通过C语言代码示例展示了具体实现。堆在排序、优先队列等场景有广泛应用,理解其原理对掌握高效数据处理至关重要。
2026-07-06 15:06:06
537
22
原创 使用数组打造环形缓冲器——原理、实现与代码详解
本文介绍了环形缓冲器(环形队列)的原理与实现。首先分析了普通数组实现队列的三大问题:假溢出、数据搬移开销大和扩容连锁反应。随后详细阐述了环形队列的核心思想——通过取模运算实现逻辑循环,重点讲解了头尾指针定义与牺牲一个存储单元的判空判满约定。文章提供了完整的C语言实现代码,包括初始化、入队、出队、判空判满等关键操作,并分析了特殊情况下指针运算的数学原理。最后列举了环形缓冲器在操作系统、通信、多媒体等领域的典型应用场景,展示了其在高性能系统中的重要作用。
2026-06-27 21:32:54
530
19
原创 深入栈与队列的概念和底层结构实现(数组 vs 链表)
本文介绍了栈和队列这两种基础数据结构的概念及其C语言实现。栈采用动态数组实现,遵循LIFO原则,关键操作包括初始化、入栈、出栈、获取栈顶元素等,时间复杂度均为O(1)。队列使用链表实现,遵循FIFO原则,通过定义节点结构和管理结构分离数据与操作信息,支持初始化、入队、出队等操作。文章通过图示和代码详细展示了两种数据结构的实现逻辑,并对比分析了数组与链表实现的优缺点,其中数组实现栈缓存命中率高但存在扩容成本,链表实现队列内存利用率高但需额外指针开销。最后提供测试代码验证功能完整性,适合需要掌握基础数据结构实现
2026-06-20 16:54:53
603
15
原创 链表经典题由浅入深顺序讲解(提供分析、多解与图例)
本文介绍了五种链表问题的解法;反转链表:使用双指针法或递归法修改每个节点的next指向前驱节点,需注意处理原头节点和尾节点的特殊情况。 链表的中间节点:可通过统计长度后遍历一半,或采用快慢指针法(快指针走两步,慢指针走一步)。 回文链表:方法一是将链表值存入数组后双指针判断;方法二是找到中点反转后半段,再与前半段逐个比较。 相交链表:先遍历两链表获取长度差,让较长链表先走差距步,然后同步遍历直到找到相同节点。随机链表的复制:利用原链表插入拷贝节点复制新链表。每种解法均配有图示和详细步骤说明。
2026-06-14 21:44:32
476
19
原创 从线性表到单链表:原理、实现与经典应用
本文介绍了C语言实现单向不循环链表的基本概念和完整代码实现。首先阐述了线性表的定义和特点,对比了顺序存储和链式存储的区别。重点讲解了单链表的结构原理,包括节点定义、逻辑示意图等。 代码实现部分详细展示了单链表的核心操作: 创建新节点函数SNBuyNode 尾插(SNPushBack)和头插(SNPushFront)操作 尾删(SNPopBack)和头删(SNPopFront)操作 其他辅助函数如断言检查、错误处理等 每种操作都配有清晰的逻辑图示和代码注释,帮助理解链表操作的基本原理和实现细节。文章采用头文件
2026-06-07 23:49:20
545
14
原创 约瑟夫环:从“移动步数”到“动态规划”的四种解法演变
本博客将使用C语言讲解约瑟夫环算法聚焦链表模拟法,通过三种不同风格代码的对比,展示设计的巧妙拓展的重要理念:循环不变量——初始化 cur 为 prev 的 next,也就是初始化为链表的头节点,使其与尾节点的步长在环内永远差一,遍历环,在环内使用另一个循环报数,由于 cur 为头节点,从报数逻辑来看已完成报数,因此 i 初始化为1,每次内循环令 cur 走 m - 1步。当内循环执行时,其内部逻辑使 prev 为 cur 的前驱结点,使其步长永远保持差一。
2026-05-27 23:22:45
800
16
原创 手撕顺序表:从底层数组到接口实现
本文介绍了使用C语言实现动态顺序表的方法。顺序表本质上是封装了属性和操作接口的数组,包含size(当前元素个数)和capacity(总容量)两个关键属性。文章详细讲解了顺序表的概念、实现原理和操作接口,包括初始化、增删改查等核心功能。重点分析了动态扩容策略(初始4元素,之后2倍增长)以及头插尾插等操作的实现细节。通过结构体封装和函数接口设计,顺序表相比普通数组具有更完善的属性和操作方法。文中配有示意图和完整代码示例,帮助读者理解顺序表的物理存储结构和逻辑实现。
2026-05-24 15:55:14
603
25
原创 关于我尝试写博客这档事
《编程学习者的成长笔记:从数据结构到开源分享》 摘要: 一位名为Doubletful的人工智能专业学生,在掌握C/Python编程和基础算法后,决定通过撰写技术博客实践费曼学习法。这位喜欢探究算法细节的学习者,将以开源方式分享数据结构、LeetCode题解等编程笔记,并计划持续拓展技术领域。目前具备数据分析可视化能力,未来希望通过竞赛和考试提升专业水平。文章配图展现了作者的二次元性,并以幽默的"蓝色胶体"形象拉近与读者的距离。
2026-05-21 21:12:50
113
9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅