
数据结构与算法
文章平均质量分 94
分享一些数据结构与算法相关知识点
草莓熊Lotso
会当凌绝顶 ,一览众山小
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【数据结构初阶】--排序(三):冒泡排序,快速排序
本文主要介绍了冒泡排序和快速排序两种算法。冒泡排序通过元素交换实现排序,时间复杂度为O(n^2),文中给出了优化版本。快速排序采用分治思想,以基准值将序列分为两部分递归处理,详细讲解了hoare、挖坑法两种实现方式,时间复杂度为O(nlogn)。最后提到两种排序的性能对比,快速排序在效率上明显优于冒泡排序,但指出基准值的选择会影响快速排序的性能,将在后续文章中深入探讨优化方法。原创 2025-08-05 07:47:59 · 650 阅读 · 0 评论 -
【数据结构初阶】--排序(一):直接插入排序,希尔排序
本文介绍了两种插入排序算法:直接插入排序和希尔排序。直接插入排序通过逐个插入元素构建有序序列,时间复杂度为O(n^2);希尔排序是其改进版本,采用分组插入策略,时间复杂度优化至O(n^1.3)。文章详细讲解了两种算法的实现思路、代码示例及性能对比测试,结果表明希尔排序在处理10万数据时效率显著优于直接插入排序。适合C/C++学习者巩固排序算法知识,提升代码实现能力。原创 2025-08-01 07:24:57 · 10145 阅读 · 3 评论 -
【数据结构初阶】--二叉树选择题专辑
本文总结了二叉树相关选择题的解题思路与核心知识点:1️⃣ 二叉树性质题:通过节点关系式n0=n2+1快速求解叶节点数(如399节点题答案为200);2️⃣ 完全二叉树题:掌握2n节点时叶节点恒为n的特性,以及高度计算公式(531节点树高为10);3️⃣ 遍历序列题:前序首元素为根节点,后序末元素为根节点,中序用于划分左右子树。典型例题包括根据层序ABCDEFGH推前序(ABDHECFG)、后序与中序相同情况下的层序(FEDCBA)等。强调通过画图辅助解题,并附有详细证明过程,适合巩固原创 2025-08-01 07:23:23 · 1024 阅读 · 5 评论 -
【数据结构初阶】--二叉树(六)
本文介绍了二叉树层序遍历和完全二叉树判断的实现方法。通过队列数据结构实现了二叉树的层序遍历(广度优先遍历),代码中将根节点入队后依次处理各层节点。在判断完全二叉树时,利用队列进行层序遍历,若遇到空节点后仍有非空节点,则判定为非完全二叉树。包含完整的C语言实现代码,包括二叉树常用操作接口(前/中/后序遍历、节点统计、销毁等),并提供了测试用例验证代码正确性。作者还预告将推出二叉树相关选择题的专题讲解,帮助读者掌握二叉树的核心知识点。原创 2025-07-31 17:56:02 · 1124 阅读 · 5 评论 -
【数据结构初阶】--二叉树(五)
本文介绍了二叉树的常用操作实现,包括节点个数计算、叶子节点计数、第k层节点查找、深度计算、节点查找和销毁等。通过递归方式实现了各个功能接口,并提供了完整的代码示例和测试用例。文章详细讲解了每个接口的实现思路,包括节点统计公式(根节点+左右子树)、叶子节点判断条件、递归参数传递技巧等。所有功能都经过测试验证,代码存放在Tree.h、Tree.c和test.c文件中。最后提示后续将继续实现完全二叉树判断和层序遍历功能。原创 2025-07-31 07:29:42 · 10399 阅读 · 7 评论 -
【数据结构初阶】--二叉树(四)
本文介绍了链式结构二叉树的实现方法,主要讲解了前序、中序和后序遍历的递归实现。文章首先通过buyNode函数手动创建了一个二叉链表结构,然后详细解析了三种遍历方式的递归过程和代码实现,并附有递归栈帧示意图帮助理解。前序遍历顺序为根-左-右,中序遍历为左-根-右,后序遍历为左-右-根。代码实现简洁明了,通过递归调用完成遍历操作。文章强调理解递归过程的重要性,建议读者绘制递归栈帧图加深理解。后续文章将继续探讨二叉树的其他操作方法。原创 2025-07-30 07:22:42 · 1010 阅读 · 3 评论 -
【数据结构初阶】--二叉树(三)
本文探讨了堆排序中的两种建堆方法:向上调整算法和向下调整算法。通过数学证明得出,向下调整建堆的时间复杂度O(n)优于向上调整的O(nlogn)。重点分析了Top-K问题的解决方案:使用前K个元素建堆(求最大建小堆,求最小建大堆),再与剩余元素比较调整。文章还提供了C代码实现和数据验证方法,并计算了算法时间复杂度为O(k+(n-k)logk)。最后建议读者实践巩固这些堆相关的算法知识。原创 2025-07-29 10:04:34 · 864 阅读 · 1 评论 -
【数据结构初阶】--栈和队列(二)
本文介绍了队列数据结构的概念与实现方法。作者首先阐述了队列先进先出(FIFO)的特性,指出使用链表结构实现比数组更优。文章详细讲解了队列的结构定义、入队出队操作、队首队尾数据获取的实现过程,并提供了判空、数据统计、销毁等辅助功能的代码实现。通过测试验证了队列功能的正确性。要扎实掌握栈和队列的基础知识,为后续学习更复杂的二叉树结构做好准备。全文逻辑清晰,代码实现详尽,涵盖了队列的核心操作和注意事项。原创 2025-07-23 07:45:39 · 1056 阅读 · 0 评论 -
【数据结构初阶】--二叉树(二)
本文介绍了堆(Heap)这一特殊二叉树结构的实现与应用。主要内容包括:1.堆的概念与结构定义,分为大堆和小堆;2.堆的基本操作实现,包括初始化、销毁、插入数据(含向上调整算法)、删除数据(含向下调整算法)等;3.两种堆排序实现方式:基于堆数据结构的排序(非标准)和基于堆思想的排序(标准),后者通过建堆和交换操作实现高效排序;4.完整代码展示,包含头文件、实现文件和测试文件。通过图示和代码示例详细讲解了堆操作的实现原理,特别是向上/向下调整算法的应用,帮助读者理解堆这一重要数据结构及其在排序中的应用。原创 2025-07-26 07:46:24 · 1146 阅读 · 3 评论 -
【数据结构初阶】--单链表(二)
这篇博客详细介绍了单链表剩余接口的实现过程,主要包括查找、指定位置插入/删除、销毁等操作。作者通过分步讲解和代码演示,展示了单链表查找(SLTFind)、指定位置前/后插入(SLTInsert/SLTInsertAfter)、指定位置删除(SLTErase/SLTEraseAfter)以及链表销毁(SListDestroy)的实现方法。每个接口都配有重点提示和测试用例,确保功能正确性。最后提供了完整的SList.h、SList.c和test.c代码,帮助读者全面理解单链表的实现。作者建议读者点赞、评论、收藏原创 2025-07-17 09:02:45 · 1096 阅读 · 1 评论 -
【数据结构初阶】--单链表(一)
本文介绍了单链表的定义和基本操作实现。首先对比了顺序表和链表的优缺点,指出链表在插入删除操作上更具优势。接着详细讲解了单链表的节点结构定义,并逐步实现了打印、尾插、头插、尾删、头删等核心功能。每个操作都配有代码示例和逻辑说明,通过创建测试用例验证了各接口的正确性。最后提供了完整的实现代码,包括头文件和测试文件。文章还预告后续将实现更多链表操作接口,为读者理解链表数据结构打下基础。原创 2025-07-15 08:59:24 · 3553 阅读 · 1 评论 -
【数据结构初阶】--树和二叉树先导篇
本文介绍了树和二叉树的基本概念与结构。主要内容包括:1.树的概念与性质,如层次结构、子树不相交等;2.树的相关术语(根节点、叶子节点、度等);3.树的表示方法(孩子兄弟表示法)和实际应用(文件系统);4.二叉树的定义、特点及两种特殊类型(满二叉树和完全二叉树);5.二叉树的存储结构(顺序存储和链式存储)。为后续深入学习树结构奠定了基础,适合C++和数据结构的初学者阅读。原创 2025-07-24 08:55:08 · 1145 阅读 · 0 评论 -
【数据结构初阶】--栈和队列(一)
本文介绍了栈的数据结构实现,通过数组实现一个后进先出(LIFO)的栈结构。主要内容包括:1.栈的基本概念和结构定义;2.栈的初始化和销毁操作;3.入栈和出栈的实现细节;4.获取栈顶元素和有效元素个数的方法;5.完整的代码实现及测试案例。文章强调栈的操作都在一端进行,类比水杯的接水和倒水过程,并提供了完整的.h和.c文件实现代码。实现过程中使用了动态内存分配来支持栈的扩容,并展示了如何测试栈的后进先出特性。原创 2025-07-23 07:45:32 · 1226 阅读 · 1 评论 -
【数据结构初阶】--双向链表(二)
本文详细讲解了双向链表的实现,包括初始化、增删改查等核心操作。关键点包括:1) 使用LTBuyNode函数创建新节点;2) 尾插和头插操作时注意前后节点指针的调整顺序;3) 删除操作前需判断链表是否为空;4) 实现了在指定位置前后插入节点的功能;5) 提供了完整代码示例和测试用例。文章通过图示和代码注释详细解释了每个操作的实现逻辑,特别是节点指针的调整顺序,并给出了优化初始化和销毁操作的方案。适合C语言学习者通过实践掌握双向链表的数据结构实现。原创 2025-07-22 07:38:37 · 1409 阅读 · 0 评论 -
【数据结构初阶】--双向链表(一)
本文介绍了链表分类与双向链表实现,重点讲解了带头双向循环链表的初始化操作。作者将链表分为8种类型,主要对比单链表和双向链表特性。通过代码示例展示了双向链表节点的数据结构定义,以及哨兵位头节点的初始化实现,强调使用二级指针修改形参的必要性。文章为后续双向链表接口实现做铺垫,并提醒读者注意指针级别的使用场景。原创 2025-07-22 07:38:24 · 2792 阅读 · 1 评论 -
【数据结构初阶】--顺序表(三)
本文详细介绍了顺序表剩余接口的实现,包括指定位置查找、插入、删除、修改和销毁操作。通过具体代码示例展示了如何查找元素位置(SLFind)、在指定位置插入(SLInsert)和删除(SLErase)元素,以及修改元素值(SLModify)和销毁顺序表(SLDestory)。测试代码验证了各接口的正确性,并提供了完整代码展示。文章还建议思考如何利用这些基础接口实现头插/尾插等操作,为后续数据结构学习打下基础。原创 2025-07-14 07:32:46 · 1009 阅读 · 0 评论 -
【数据结构初阶】--顺序表(二)
本文介绍了顺序表的基本操作实现,包括尾插、头插、尾删和头删功能。作者通过C语言代码展示了各功能的实现细节,重点讲解了动态扩容机制和边界条件处理。在尾插和头插操作中,都需检查并扩容存储空间,其中头插需要移动全部元素;尾删和头删则相对简单,但需注意空表判断。通过时间复杂度分析得出:顺序表更适合尾部操作,尾插/删的时间复杂度O(1)优于头插/删的O(n)。文章还提供了完整的代码实现和测试案例,为后续实现指定位置操作奠定了基础。原创 2025-07-13 10:28:20 · 970 阅读 · 0 评论 -
【数据结构初阶】--顺序表(一)
本篇博客介绍了数据结构中的顺序表概念与实现。主要内容包括:1)顺序表与线性表的关系,顺序表是物理结构连续的线性表;2)静态顺序表与动态顺序表的分类及差异;3)动态顺序表的三文件实现方式(.h声明、.c定义、test.c测试)。重点讲解了动态顺序表的初始化实现,强调传址调用的必要性。通过代码示例和重点提示帮助大家理解顺序表的底层实现原理。后续将介绍顺序表的增删查改等操作接口。原创 2025-06-25 08:07:24 · 6676 阅读 · 71 评论 -
【数据结构初阶】--算法复杂度的深度解析
本文围绕算法复杂度展开深度解析,介绍数据结构与算法基础,指出其在校园招聘中的重要性及学习秘诀;阐述算法效率衡量维度(时间与空间复杂度),详解大O渐进表示法及计算示例;对比常见复杂度效率排序,并附排序算法复杂度表;最后以旋转数组问题为例,分析三种思路的时间与空间复杂度,其中三次逆置法为最优解,实现时间O(N)、空间O(1)的高效算法。原创 2025-06-08 17:22:17 · 6562 阅读 · 3 评论