数据结构与算法
文章平均质量分 94
这个专栏旨在由浅入深带领初学者了解什么是数据结构,以写出更好的程序
say_fall
与君共赴,万里征途 | 2026年6月创作之星
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
校招必看:八大排序算法原理、复杂度与高频面试题
本文系统介绍了八大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序和计数排序。每种算法从思想原理、动图演示、代码实现到复杂度分析进行详细讲解,并比较了不同排序算法的适用场景和性能特点。文章强调没有一种排序算法在所有情况下最优,需要根据数据规模、内存限制和稳定性要求选择合适的算法。通过本文,读者可以全面掌握排序算法的核心知识,为算法设计和性能优化打下坚实基础。原创 2026-05-06 23:22:01 · 632 阅读 · 40 评论 -
搞懂 set 底层不用死记硬背:二叉搜索树手把手实现教程
本文介绍了C++中set容器的底层实现原理,重点讲解了二叉搜索树的结构特性及其在set中的应用。文章首先阐述了set的核心特性(自动排序和元素唯一性),然后深入分析了二叉搜索树的插入、查找、删除等基本操作,特别针对删除操作中的复杂情况(如节点有两个子节点时)提出了替换法解决方案。通过从基础功能入手逐步构建完整set容器的实践方式,帮助开发者更好地理解标准库设计思想,掌握数据结构底层实现逻辑。文中配有示意图和代码示例,适合希望深入理解STL容器实现原理的中高级C++开发者阅读。原创 2026-04-13 21:18:30 · 511 阅读 · 11 评论 -
有关算法的简单数学问题
本文介绍了数论基础中的位运算、质数判断、组合数计算、排列与错排等算法模板。主要内容包括:1)位运算技巧(取末位、奇偶判断、位操作);2)质数筛法(埃拉托斯特尼筛法)及单数判断;3)组合数计算(杨辉三角法);4)排列公式实现(阶乘模板);5)错排问题的递推解法。文章提供了可直接使用的C++代码模板,适用于算法竞赛和编程练习。原创 2026-04-12 16:50:07 · 509 阅读 · 27 评论 -
滑动窗口算法
本文介绍了滑动窗口算法及其在多个LeetCode题目中的应用。滑动窗口本质是同向双指针,通过维护一个区间来高效解决问题。文章解析了《长度最小的子数组》《无重复字符的最长子串》《最大连续1的个数Ⅲ》《将x减到0的最小操作数》《水果成篮》五道题目的解法,对比了暴力枚举和滑动窗口两种思路,展示了如何利用单调性优化时间复杂度。核心步骤包括进窗口、判断条件、出窗口和更新结果,代码示例采用C++实现,体现了该算法在子数组/子串问题中的高效性。原创 2026-04-12 16:11:27 · 924 阅读 · 17 评论 -
位运算底层逻辑与解题应用绪论
本文系统介绍了位运算的核心操作与应用技巧,包括按位与、或、异或等基础运算,以及提取二进制末位、判断奇偶、设置指定位、lowbit操作等实用方法。通过二进制底层特性,位运算能高效简化算法逻辑,降低复杂度。文章还解析了异或运算的三大定律(自反性、交换律等),并指出快速幂等算法本质上也依赖位运算。掌握这些技巧有助于提升算法解题能力,为处理状态压缩、找唯一数等问题奠定基础。原创 2026-03-17 16:41:25 · 530 阅读 · 27 评论 -
【系统算法】双指针算法:从原理到实战(含LeetCode经典例题)
这篇文章摘要如下: 本文系统介绍了双指针算法的核心思想与应用场景,重点讲解了快慢双指针和首尾双指针两种典型模式。通过快速排序、移动零、复写零等经典案例,详细分析了双指针如何将时间复杂度从O(n²)优化至O(n)。文章还结合LeetCode真题(如盛水容器问题),展示了暴力解法与双指针优化的对比,强调双指针在提升算法效率方面的优势。全文采用理论解析+代码实现的方式,帮助读者深入理解双指针算法的设计思路和实现技巧。原创 2026-02-17 18:43:40 · 949 阅读 · 17 评论 -
二叉树从入门到实践:堆与链式结构全解析
本文系统介绍了树与二叉树的基本概念,重点解析了二叉树的两种存储结构及其实现。主要内容包括:1)树结构的核心术语与二叉树特性;2)顺序存储的二叉堆实现,包含向上/向下调整等关键算法;3)链式存储的二叉树结构。通过代码示例(如堆排序、节点操作等)展示了二叉树在数据处理中的实际应用,为理解更复杂的树形结构(如AVL树、红黑树)奠定基础。原创 2026-02-17 18:43:13 · 646 阅读 · 4 评论 -
时间复杂度:容易算错?单看循环算是不对的!
本文介绍了时间复杂度的概念与计算方法,重点分析了二分查找的时间复杂度特性。时间复杂度是衡量算法效率的关键指标,反映算法执行时间随输入规模的增长趋势。文章指出常见误区,强调不能仅凭循环次数判断复杂度,并以二分查找为例说明对数阶O(log n)的特性。通过对比二分查找与线性查找的效率差异,展示了二分查找在大数据量下的优势,同时也指出其必须依赖有序数组的局限性。最后总结了二分查找的两种实现方式(左闭右闭和左闭右开)及其区别。原创 2025-11-26 10:31:54 · 733 阅读 · 1 评论 -
数据结构之顺序表:一款优秀的顺序存储结构
本文介绍了顺序表的基本概念与实现方法。顺序表是一种线性存储结构,分为静态和动态两种类型。静态顺序表容量固定,而动态顺序表可扩容。文章详细讲解了动态顺序表的实现,包括初始化、销毁、尾插、头插、头删、尾删等核心操作,并提供了完整的C语言代码示例。最后通过测试验证了顺序表的功能。完整代码已上传至Gitee仓库。原创 2025-10-22 16:23:54 · 967 阅读 · 33 评论 -
数据结构:为什么单链表总是学不透?核心原理与常见误区解析
单链表是一种通过指针将节点串联起来的线性数据结构,每个节点包含数据和指向下一节点的指针。本文结合代码实例,详细解析单链表的实现要点与常见错误。重点内容包括: 基础结构:节点由数据域和指针域组成,尾节点指针为NULL 创建要点:手动连接节点时需注意指针指向关系和边界条件 插入操作:必须使用二级指针修改头指针,避免值传递问题 删除陷阱:需处理空链表、单节点等特殊情况,防止内存泄漏 遍历技巧:正确设置循环条件确保完整访问所有节点。原创 2025-11-16 10:25:19 · 1206 阅读 · 22 评论 -
数据结构:手把手教你写 C 语言双向循环链表(内含分模块功能函数实现)
本文介绍了双向链表的实现方法,重点讲解了带头双向循环链表的数据结构设计及各功能接口的实现。通过List.h文件定义了链表节点结构体和操作接口,List.c文件具体实现了初始化、节点创建、插入删除等核心功能。关键技术包括哨兵位设计、指针四步调整法、内存管理和边界条件处理。相比单链表,双向链表通过前驱指针简化了操作,时间复杂度均为O(1)。代码采用模块化设计,通过类型抽象增强复用性,适合作为基础数据结构的学习案例。原创 2025-11-20 20:41:59 · 1153 阅读 · 17 评论 -
一文吃透 “栈”:从内存分区到数据结构的底层逻辑拆解
本文探讨了内存栈区与数据结构栈的关系及特性。内存栈区是线程专属的自动管理区域,采用LIFO机制存储函数调用参数、局部变量等临时数据,具有高效但容量有限的特点。数据结构栈是遵循LIFO规则的线性结构,可通过数组或链表实现,支持快速入栈、出栈等操作。两者虽应用场景不同,但共享先进后出的核心特性。栈结构广泛应用于函数调用、表达式求值、括号匹配等计算机科学领域,是程序执行和算法设计的基础支撑。原创 2025-12-04 08:44:00 · 1401 阅读 · 0 评论
分享