
数据结构初阶
文章平均质量分 97
基础数据结构
酷酷学!!!
那你呢 三年后 会在哪里呢
展开
-
十大排序:插入/希尔/选择/堆/冒泡/快速/归并/计数/基数/桶排序 汇总(C语言)
在计算机科学中,排序算法是一种重要的算法类别,用于将一组元素按照特定的顺序进行排列。排序算法的应用非常广泛,从日常生活中的字典排序到大规模数据处理中的并行排序,都离不开排序算法的支持。本博客将介绍十种常见的排序算法,包括冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序、计数排序、(桶排序和基数排序,稍作了解)。每种算法都会详细讲解其原理、时间复杂度、空间复杂度等关键知识点,以及对比不同算法的优劣势。原创 2024-07-05 20:46:55 · 1216 阅读 · 5 评论 -
归并排序-MergeSort (C语言详解)
好久不见, 前面我们了解到了快速排序, 那么本篇旨在介绍另外一种排序, 它和快速排序的思想雷同, 但又有区别, 这就是归并排序, 如下图, 我们对比快速排序与归并排序.本章也会深入介绍归并排序的两种写法, 递归版本的归并排序与非递归版本的归并排序.酷酷学!!!您的支持是我更新的最大动力!归并排序是一种经典的排序算法,它的基本思想是将待排序的序列分成两个子序列,分别进行递归地排序,然后将两个排好序的子序列合并成一个有序序列。将待排序序列不断地划分,直到每个子序列只有一个元素。原创 2024-07-03 12:00:48 · 1424 阅读 · 32 评论 -
快速排序(Quick Sort)(C语言) 超详细解析!!!
接上文, 前面我们了解了插入排序, 与优化版本希尔排序, 那么本篇博客将详细介绍另外一种排序, 快速排序.博客主页:酷酷学!!!快速排序是一种常用的排序算法,其时间复杂度为O(nlogn)。它的基本思想是通过一趟排序将待排序序列分割成独立的两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再对这两部分分别进行排序,最终得到一个有序序列。完。原创 2024-06-06 20:47:46 · 2200 阅读 · 41 评论 -
插入排序与希尔排序
如图所示为常见的排序算法, 前面我们已经了解了堆排序和冒泡排序, 本篇旨在介绍插入排序以及插入排序的优化版本希尔排序.插入排序和希尔排序都是基于比较的排序算法,都属于插入类排序算法。插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素逐个插入到已排序的序列中的合适位置。希尔排序是对插入排序的改进,通过将序列分割成若干子序列来进行排序,最终达到整个序列有序的目的。博客主页:酷酷学!!!插入排序和希尔排序都是比较简单的排序算法,适用于小规模数据的排序。原创 2024-06-03 18:00:49 · 1225 阅读 · 1 评论 -
由浅入深二叉树刷题指南与讲解
上一篇我们已经了解了二叉树的实现方式, 那么本篇重在进入二叉树OJ刷题环节, 我也会分享我在写题的思路, 帮助我们更好的理解二叉树, 并且本篇也进行二叉树其他方法的实现, 也欢迎不同观点评论区留言.博客主页:酷酷学!!!原创 2024-05-29 18:46:08 · 1498 阅读 · 6 评论 -
链式二叉树的前,中,后序遍历 AND 结点个数及高度等 文末附带全部代码
本文旨在介绍二叉树的链式存储中一些函数的实现博客主页:酷酷学!!!更多文章, 期待关注~前置说明: 在学习二叉树的基本操作前, 需要先创建一棵二叉树, 然后才能学习相关的基本操作. 由于目前阶段对二叉树结构掌握不够深入, 为了降低大家学习成本, 此处手动快速创建一棵简单的二叉树, 快速进入二叉树操作学习, 等二叉树结构了解查差不多时, 我们反过头来再研究二叉树真正的创建方式.}BTNode;原创 2024-05-26 21:03:06 · 1464 阅读 · 5 评论 -
向上调整建堆与向下调整建堆的时间复杂度 AND TopK问题
本篇旨在介绍使用向上调整建堆与向下调整建堆的时间复杂度. 以及topk问题博客主页:酷酷学!!!建堆的时间复杂度为O(N), 使用堆排序的时间复杂度为O(N*logN), 而使用冒泡排序的时间复杂度为O(N^2), 故堆排序的效率明显高于冒泡排序, 而topk则解决了使用较小内存而求取一堆数据中最大或者最小的前k个数据.原创 2024-05-23 21:32:17 · 1145 阅读 · 2 评论 -
堆的实现与堆排序
本篇旨在介绍二叉树中特殊结构堆, 以及堆的实现与应用更多文章 博客主页:酷酷学!!!点击关注 一起加油~int _size;}Heap;// 堆的销毁// 堆的插入// 堆顶数据的删除// 取堆顶的数据// 堆的数据个数// 堆的判空任意节点的值大于或等于其子节点的值(大顶堆)或小于或等于其子节点的值(小顶堆)。二叉树堆是一个完全二叉树,即除了最后一层外,其他层都是满的,并且最后一层的节点都靠左排列。原创 2024-05-19 18:32:37 · 1278 阅读 · 5 评论 -
LeetCode题目: 循环队列与用栈实现队列
“大部分学生与马克思所描述的工人十分相似, 马克思所描述的工人是为了生存, 不得不出卖劳动力, 机械的重复固定的工作, 大部分学生, 也可以说是为了未来的生存, 不得不去学校每周重复地上规定的课, 工人的劳动工资因为竞争加剧, 就不断压低, 学生的分数标准, 因竞争加剧被不断抬高, 工人只有延长劳动时间或加大工作强度, 才能多得一点工资以维持生活, 学生只有延长学习时间或加大学习强度, 才能多考一点分数以保障升学, 人们总说学生有这样的问题那样的问题, 在我看来, 有时候也不能怪学生自己, 而在客观上, 我原创 2024-05-18 12:33:46 · 1253 阅读 · 7 评论 -
队列的实现与OJ题目解析
感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的生活, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了彼此第一次见面的那天.本文旨在介绍队列的实现方法以及OJ有关队列的题目分析博客主页:酷酷学!!!正文开始队列: 只允许一端进行插入数据操作, 在另一端进行删除操作的特殊线性表, 队列具有先进先出FIFO(First In First Out)入队列: 进行插入操作的一端称为队尾出队列: 进行删除操作的一端称为队头。原创 2024-05-15 14:57:20 · 1111 阅读 · 13 评论 -
栈的实现与OJ括号匹配
人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢的工作, 又或者是那个内心敏感的自己, 总之你害怕什么, 就要去面对什么, 你想要什么, 就要去靠近什么, 在声色名利中守住本性, 在世俗目光中信步前行, 大浪淘沙, 去伪存真, 破而后立, 否极泰来.本文旨在探讨数据结构中栈的实现以及顺序表与链表区别总结.更多精彩, 期待关注 主页:酷酷学!!!栈。原创 2024-05-13 15:08:22 · 1179 阅读 · 73 评论 -
空间复杂度与链表刷题
空间复杂度表示算法在运行过程中需要使用的额外的空间资源。空间复杂度的计算通常是以算法需要的额外空间大小来衡量的。链表是一种常见的数据结构,用于存储和操作一系列具有关联关系的数据元素。链表的面试题常见的有:反转链表: 将一个链表反转,即将链表中的节点逆序排列。链表中倒数第k个节点: 找到链表中倒数第k个节点的值。链表是否有环: 判断一个链表是否存在环。合并两个有序链表: 将两个有序链表合并为一个有序链表。删除链表中的重复元素: 删除链表中重复的元素,使得每个元素只出现一次。原创 2024-05-11 13:21:38 · 1236 阅读 · 22 评论 -
算法的时间复杂度
博客主页:酷酷学!!!正文开始时间复杂度是衡量算法性能的重要指标,它描述了算法的运行时间随着输入规模的增加而增长的趋势。通过对时间复杂度进行分析,我们可以估计算法在不同规模下的运行时间,从而选择更优的算法。!!完。原创 2024-05-08 15:05:03 · 1414 阅读 · 8 评论 -
C语言数据结构 ---- 单链表实现通讯录
顺表实现通讯录: 点击~顺序表实现通讯录在日常生活中,我们经常需要记录和管理大量的联系人信息,比如朋友的电话号码、家庭成员的生日等等。而通讯录就是一种常见的方式,用于存储和组织这些联系人信息。通讯录可以采用不同的数据结构来实现,前面我使用了顺序表创建, 单链表是一种常用且简单的数据结构之一。单链表由一系列节点组成,每个节点包含两部分:数据域和指针域。数据域用于存储联系人的信息,指针域用于指向下一个节点。在这篇文章中,我们将使用单链表来实现一个简单的通讯录。原创 2024-05-02 15:45:20 · 1820 阅读 · 8 评论 -
数据结构 -- 双向链表
双向链表是一种常见的数据结构,它与单向链表相比,在存储元素的同时还记录了元素的前驱节点。双向链表可以实现双向遍历,不仅可以从头到尾遍历元素,还可以从尾到头遍历。这种特性使得双向链表在某些场景下更加方便和高效。在双向链表中,每个节点都有两个指针,一个指向前驱节点,一个指向后继节点。这样,我们可以通过前驱指针和后继指针,方便地进行插入、删除、查找等操作。在接下来的文章中,我们将详细讨论双向链表的实现和常见操作。我们将逐步介绍双向链表的构造、插入、删除、查找等操作,并给出相应的代码示例。原创 2024-04-29 15:53:34 · 1510 阅读 · 13 评论 -
刷题日记 ---- 顺序表与链表相关经典算法题(C语言版)
以上是对顺序链表学习中比较经典的算法题, 里面的算法思想很值得学习, 并且涵盖了一些细节和错误, 使得对顺序表和链表的理解更加深刻!!原创 2024-04-27 17:11:18 · 1360 阅读 · 5 评论 -
链表 (2)
补充说明:1、链式机构在逻辑上是连续的,在物理结构上不⼀定连续2、节点⼀般是从堆上申请的3、从堆上申请来的空间,是按照⼀定策略分配出来的,每次申请的空间可能连续,可能不连续本篇旨在实现链表的剩下的方法//查找//在指定位置之前插⼊数据//删除pos节点//在指定位置之后插⼊数据//删除pos之后的节点//销毁链表链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。原创 2024-04-25 18:00:18 · 1131 阅读 · 45 评论 -
链表(1)
问题与思考前面我们了解了顺序表中间/头部的插⼊删除,时间复杂度为O(N)增容需要申请新空间,拷⻉数据,释放旧空间。会有不⼩的消耗。增容⼀般是呈2倍的增⻓,势必会有⼀定的空间浪费。例如当前容量为100,满了以后增容到200,我们再继续插⼊了5个数据,后⾯没有数据插⼊了,那么就浪费了95个数据空间。链表就可以很好解决以上的问题首先定义链表类型,和顺序表一样, 定义一个头文件,两个源文件,在头文件中进行链表的定义和函数的声明,以及包含需要的库函数文件在头文件中定义链表结构体//定义结点的结构。原创 2024-04-24 21:13:24 · 819 阅读 · 5 评论 -
拿捏 顺序表(2) ----- 实现通讯录
书接上文, 我们已经初步了解了线性表, 顺序表其实就是在数组的基础上增加了一些特有的功能, 那么顺序表有哪些应用呢?下面我们一起使用顺序表实现通讯录的功能.酷酷学!!!基于上篇的讲解, 我们继续来给顺序表添加以下三个功能//在指定位置前插入元素//删除指定位置的元素//查找元素所在位置上篇我们已经了解了顺序表基础的运用, 基于此我们让顺序表的功能更完善assert(sp);i>pos;i--)//最后一次arr[pos+1] = arr[pos]sp->size++;原创 2024-04-22 21:50:17 · 1093 阅读 · 2 评论 -
拿捏 顺序表(1)
顺序表是一种线性数据结构,用于存储具有相同数据类型的数据元素。它通过一片连续的存储空间来存储数据,可以按照元素的物理顺序来访问和操作。在顺序表中,元素的存储位置是连续的,可以通过下标来访问元素。通过下标,可以快速访问和修改顺序表中的元素,这是顺序表的一个重要特点。顺序表的插入操作比较复杂,需要将插入位置之后的所有元素后移一位,然后将新元素插入到空出的位置。删除操作也类似,需要将删除位置之后的所有元素前移一位,然后将最后一个元素删除。顺序表的优点是存储和访问元素的效率高,可以随机访问元素。原创 2024-04-21 18:19:27 · 1699 阅读 · 3 评论