
数据结构篇
文章平均质量分 93
我想吃余
正在学习编程的大二小白,坚持学习,努力学习。
展开
-
【初探数据结构】归并排序与计数排序的序曲
本文主要内容是归并的递归和非递归以及计数排序的实现方法。文章会提及很多容易忽视的易错点(大多是我自己踩过的坑😂),这是我在学习这块内容时获取的教训和宝贵经验。因为自己淋过雨,希望能为你们撑把伞!共勉!😁算法时间复杂度空间复杂度稳定性适用场景归并排序O(n log n)O(n)稳定大数据量、需稳定排序计数排序O(n + k)O(k)稳定小范围整数、非比较排序希望这篇文章对你有所帮助🌹🌹🌹。原创 2025-03-26 21:44:32 · 1136 阅读 · 0 评论 -
【初探数据结构】快速排序的四种实现方式(Hoare,挖坑,前后指针,非递归)
快速排序是一种高效的分治排序算法,核心思想是通过选定基准元素将数组划分为两部分,递归排序子数组。Hoare法挖坑法前后指针法及非递归实现,并分析其优缺点。快速排序时间复杂度ON∗logNO(N*logN)ON∗logNHoare法适合教学和理解分治思想。挖坑法在减少交换次数时表现优异。前后指针法代码简洁,适合扩展。非递归实现解决了递归栈溢出的问题,适合工程应用。gitee源码理解每种方法的核心逻辑和细节,才能在实际应用中灵活选择最优方案。原创 2025-03-25 10:12:11 · 845 阅读 · 1 评论 -
【初探数据结构】详解三大经典排序算法(选择/堆/冒泡)
特性选择排序堆排序冒泡排序时间复杂度O(n²)O(n log n)O(n²)空间复杂度O(1)O(1)O(1)稳定性不稳定不稳定稳定适用场景小数据集大数据集教学演示优点简单易实现高效的大数据排序稳定且直观缺点效率低实现较复杂效率最低希望这篇文章对你有帮助~🌹🌹🌹。原创 2025-03-24 16:15:44 · 1142 阅读 · 10 评论 -
【初探数据结构】直接插入排序与希尔排序详解
插入排序:简单但低效,适合小规模数据。希尔排序:通过分组优化插入排序,性能显著提升,是插入排序的高效变种。选择建议:数据规模较小时用插入排序,中等规模用希尔排序,大规模数据可考虑更高效的算法(如快排、归并)后序会一一讲解。原创 2025-03-24 10:44:51 · 988 阅读 · 18 评论 -
【初探数据结构】二叉树的链式结构——分治的暴力美学
BTNode;使用左右指针实现树形结构data字段存储节点值(示例中为char类型)本文实现了二叉树的创建、遍历、统计等核心操作。读者可通过完整代码进一步实验。二叉树作为基础数据结构,其思想可延伸至AVL树、红黑树等高级结构,值得深入学习。希望这篇博客能帮助你更好地理解二叉树操作!原创 2025-03-22 15:04:44 · 1435 阅读 · 5 评论 -
【初探数据结构】堆的应用实例(堆排序与TopK问题)
应用场景核心思路时间复杂度空间复杂度优势堆排序构建堆 + 交换堆顶O(n log n)O(1)原地排序,适合内存敏感TopK问题维护大小为K的最小堆O(n log K)O(K)高效处理海量数据或数据流堆结构凭借其高效的插入删除和极致的空间利用率,在排序与筛选问题中占据独特地位。掌握堆排序与TopK的解法,能显著提升处理大规模数据的能力。理解原理后,可尝试手写堆实现或结合具体业务场景优化代码,进一步巩固知识。原创 2025-03-22 15:02:52 · 1084 阅读 · 0 评论 -
【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)
堆是一种基于完全二叉树的数据结构,通常分为最大堆(父节点值≥子节点)和最小堆(父节点值≤子节点)。由于完全二叉树的特性,堆可以用数组高效存储,通过索引关系快速定位父子节点。如果有⼀个关键码的集合,把它的所有元素按完全⼆叉树的顺序存储⽅式存储,在⼀个⼀维数组中,并满⾜:$K=\{ k_0,k_1,k_2,...,k_{n-1} \}$,` i = 0、1、2... `,则称为⼩堆(或⼤堆)。将根结点最⼤的堆叫做最⼤堆或⼤根堆,根结点最⼩的堆叫做最⼩堆或⼩根堆。原创 2025-03-21 14:26:46 · 675 阅读 · 0 评论 -
【初探数据结构】链表OJ算法——哨兵位(合并两个有序链表详解)
如果这道题不用哨兵位,你将会被一个错误搞的焦头烂额——对空指针解引用,不相信的话你可以去试试,你一定会影响深刻的。通过这道题,是不是觉得哨兵位真的很香?非常省事,特别是这种多链表的联合问题,我们一定要留个心眼。原创 2025-03-05 08:16:24 · 876 阅读 · 0 评论 -
【初探数据结构】树与二叉树
树结构相对线性表就⽐较复杂了,要存储表⽰起来就⽐较⿇烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表⽰⽅式如:双亲表⽰法,孩⼦表⽰法、孩⼦双亲表⽰法以及孩⼦兄弟表⽰法等。二叉树是树形结构中我们最常用的,⼀棵⼆叉树是结点的⼀个有限集合,该集合由⼀个根结点加上两棵别称为左⼦树和右⼦树的⼆叉树组成或者为空。⼀个⼆叉树,如果每⼀个层的结点数都达到最⼤值,则这个⼆叉树就是满⼆叉树。完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树⽽衍生出来的。要注意的是满⼆叉树是⼀种特殊的完全⼆叉树。原创 2025-03-20 00:41:05 · 1136 阅读 · 0 评论 -
【初探数据结构】线性表——栈与队列(代码实现与详解)
栈和队列是算法设计的基石,理解其原理和实现是程序员的基本功。建议通过实际编码练习(如实现动态栈、循环队列)加深理解,并多刷相关面试题提升应用能力。原创 2025-03-11 06:00:00 · 1075 阅读 · 4 评论 -
【初探数据结构】带环链表:原理、判断与数学证明
由节点构成的链式结构中存在至少一个节点,其指针域指向链表中已存在的节点,形成闭合环路。环路结构:尾节点不指向NULL而指向历史节点遍历特性:从任意环内节点出发将陷入无限循环。原创 2025-03-10 06:00:00 · 1113 阅读 · 5 评论 -
【初探数据结构】链表OJ算法——快慢指针
如果读者觉得不过瘾,那就再来两题吧~141. 环形链表 - 力扣(LeetCode)19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)本文只讲解了两个简单的题目,目的在于帮助读者打好基础,下一篇文章将要讲解的带环链表也会用到快慢指针,届时读者可以对其有更深层次的认知。原创 2025-03-07 15:05:57 · 1445 阅读 · 2 评论 -
【初探数据结构】线性表——链表(二)带头双向循环链表(详解与实现)
带头双向循环链表,顾名思义,包含以下几个重要特点:每个结构体包含:带头双向循环链表支持常见的增删查改操作,以下是常用操作的实现。在初始化时,创建一个头节点,并将其和指针都指向自身,这样链表初始时是空的,并且形成了一个循环结构。用于执行具体的插入操作,它将新节点插入到链表末尾。3.3 删除节点尾删操作:删除链表尾部的节点。头删操作:删除链表头部的节点。3.4 查找节点通过值查找链表中的节点。3.5 删除指定节点通过指针删除指定位置的节点。4. 带头双向循环链表的优势简化原创 2025-03-06 12:54:34 · 1236 阅读 · 23 评论 -
【初探数据结构】线性表————链表(一)(单链表的实现)
链表是一种物理存储结构非连续、非顺序的线性数据结构。与数组不同,链表的元素通过指针链接形成逻辑上的顺序关系。每个节点包含两部分:链表的优势:每个节点都是一个结构体,这个结构体包含2个(单链表)或者3个成员(双链表)。指针域:指向下一个节点的指针:指向上一个节点的指针数据域:存储数据各个节点通过指针相互链接,构成了链表链表一共有8种这三个特性自由组合,就组成了8种链表我们主要研究这两种链表:这两种链表吃透后,剩余的也就自然而然的学会了。头文件编写:SList.h插入节点尾插原创 2025-03-04 16:59:54 · 878 阅读 · 0 评论 -
【初探数据结构】线性表———顺序表的详解和实现
线性表是n个具有相同特性的数据元素的有限序列,其特点为逻辑上连续,但在物理存储上可分为顺序存储和链式存储。顺序表(本文重点)链表栈队列字符串4// 初始容量// 数据存储数组int size;// 当前元素个数// 当前分配的总容量} SeqList;原创 2025-02-25 01:04:52 · 1257 阅读 · 2 评论 -
【初探数据结构】时间复杂度和空间复杂度
时间复杂度关注算法执行次数的增长趋势,空间复杂度关注额外空间的占用。大O渐近表示法通过简化表达式,聚焦主要矛盾。实际应用中需结合具体场景选择最优算法。原创 2025-02-24 17:58:22 · 1360 阅读 · 0 评论