![](https://img-blog.csdnimg.cn/8fa6027c74a3443787d028cbfdcda971.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
新星计划免费学习专栏·数据结构与算法
文章平均质量分 85
供新星计划参与者免费阅读学习
花想云
新星计划导师、C/C++领域新星创作者、运维领域新星创作者、阿里云专家博主、华为云云享专家、CSDN内容合伙人。本科在读,致力于C/C++方向的学习,同时涉及Linux操作系统学习、数据结构与算法、数据库MySQL……
展开
-
『新星计划 • 数据结构与算法』数据结构学习指南以及在校招中的重要性
2023新星计划火热进行中~ 我将担任数据结构与算法学习方向导师。本文我将为大家进行数据结构学习解读。了解数据结构是什么与数据结构的重要性(在校招中、在面试中、在笔试中、在工作中),并为大家阐明此次活动的主要学习内容与学习方法。同时,为大家带来文章创作技巧解读与热榜算法解读,教会大家如何轻松登上热榜~原创 2023-05-15 08:41:22 · 1487 阅读 · 116 评论 -
『初阶数据结构 • C语言』② - 算法为何重要
算法这个词听起来很深奥,其实不然。它只是解决某个问题的一套流程。准备一碗麦片的流程也可以说是一种算法,它包含以下 4步(对我来说是 4步吧)。(1) 拿个碗。(2) 把麦片倒进碗里。(3) 把牛奶倒进碗里。(4) 把勺子放到碗里。在计算机的世界里,算法则是指某项操作的过程。上一章我们研究了 4种主要操作,包括读取、查找、插入和删除。这一章我们还是会经常提到它们,而且一种操作可能会有不止一种做法。也就是说,一种操作会有多种算法的实现。原创 2022-12-16 14:45:40 · 1043 阅读 · 70 评论 -
『初阶数据结构 • C语言』① - 数据结构为何重要
理解数据结构的性能,关键在于分析操作所需的步数。采取哪种数据结构将决定你的程序是能够承受住压力,还是崩溃。不同的数据结构有不同的时间复杂度,类似地,不同的算法(即使是用在同一种数据结构上)也有不同的时间复杂度。既然我们已经学会了时间复杂度的分析方法,那么现在就可以用它来对比各种算法,找出能够发挥代码极限性能的那个。这正是下一章所要讲的。原创 2022-12-14 19:53:31 · 1123 阅读 · 59 评论 -
『初阶数据结构 • C语言』③ - 算法分析专业工具——大O记法
学会大 O记法,我们在比较算法时就有了一致的参考系。有了它,我们就可以在现实场景中测量各种数据结构和算法,写出更快的代码,更轻松地应对高负荷的环境。原创 2022-12-17 15:45:08 · 1907 阅读 · 101 评论 -
『初阶数据结构 • C语言』④ - 冒泡排序
大 O记法能客观地衡量各种算法的时间复杂度,是比较算法的利器。我们也试过用它来对比二分查找和线性查找的步数差异,发现二分查找的步数为 O(log N),比线性查找的 O(N)快得多。然而,写代码的时候并不总有这样明确的二选一,更多时候你可能就直接采用首先想到的那种算法了。不过有了大 O的话,你就可以与其他常用的算法比较,然后问自己:“我的算法跟它们相比,是快还是慢?”如果你通过大 O 发现自己的算法比其他的要慢,你就应该退一步,好好想想怎样优化它,才能使它变成更快的那种大 O。原创 2022-12-20 16:21:37 · 1000 阅读 · 128 评论 -
『初阶数据结构 • C语言』⑥ - 插入排序&希尔排序
之前我们衡量一个算法的效率时,都是着眼于它在最坏情况下需要多少步。原因很简单,连最坏的情况都做足准备了,其他情况自然不在话下。但是,在我们实际生活中并不总是面临最坏情况,更多的是平均情况。本章我们会见证一种自适应性极强的排序算法---希尔排序,还有它的组成它的关键---插入排序。懂得区分最好、平均、最坏情况,是为当前场景选择最优算法以及给现有算法调优以适应环境变化的关键。记住,虽然为最坏情况做好准备十分重要,但大部分时间我们面对的是平均情况。原创 2023-01-04 12:40:02 · 1256 阅读 · 117 评论 -
『初阶数据结构 • C语言』⑤ - 选择排序
大 O 是一种能够比较算法效率,并告诉我们在特定环境下应采用何种算法的伟大工具。但我们不能完全依赖于它。因为有时候即使两种算法的大 O 记法完全一样,但实际上其中一个比另一个要快得多。本章我们就来学习如何分辨那些效率貌似一样的算法,从而选出较快的那个。现在我们已经掌握了一些非常强大的算法分析手法。我们能够使用大 O去判断各种算法的效率,即便两种算法的大 O记法一样,也知道如何对比它们。不过在对比算法时,还需要考虑一个重要因素。至今我们关注的都是最坏情况下算法会跑得多慢,但其实最坏情况并不总会发生。原创 2023-01-02 10:55:15 · 909 阅读 · 63 评论 -
『初阶数据结构 • C语言』⑦ - 静态顺序表详解(附完整源码)
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。原创 2023-01-12 18:11:47 · 1470 阅读 · 113 评论 -
『初阶数据结构 • C语言』⑧ - 动态顺序表详解(附完整源码)
上一章我们学习了静态顺序表的增删查改,并认识了静态顺序表的存储结构与静态顺序表的在不同场景下的优劣。静态顺序表与动态顺序表都叫做顺序表,只不过我们平时口头所提的顺序表指的是动态顺序表。原创 2023-01-13 14:26:16 · 1448 阅读 · 87 评论 -
『初阶数据结构 • C语言』⑨ - 基于结点的数据结构——链表(单链表&&双向循环链表)附完整源码
像数组一样,链表也用来表示一系列的元素。事实上,能用数组来做的事情,一般也可以用链表来做。然而,链表的实现跟数组是不一样的,在不同场景它们会有不同的性能表现。计算机的内存就像一大堆格子,每格都可以用来保存比特形式的数据。当要创建数组时,程序会在内存中找出一组连续的空格子,给它们起个名字,以便你的应用存放数据。我们之前说过,计算机能够直接跳到数组的某一索引上。如果代码要求它读取索引 4的值,那么计算机只需一步就可以完成任务。原创 2023-01-15 12:47:08 · 1438 阅读 · 72 评论 -
『初阶数据结构 • C语言』⑩ - 栈的概念与实现(附完整源码)
栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。原创 2023-01-18 14:35:02 · 1460 阅读 · 54 评论 -
『初阶数据结构 • C语言』⑩ - 队列的概念与实现(附完整源码)
队列对于临时数据的处理也十分有趣,它跟栈一样都是有约束条件的数组(或者链表)。区别在于我们想要按什么顺序去处理数据,而这个顺序当然是要取决于具体的应用场景。你可以将队列想象成是电影院排队。排在最前面的人会最先离队进入影院。套用到队列上,就是首先加入队列的,将会首先从队列移出。因此计算机科学家都用缩写“FIFO”(first in, first out)先进先出,来形容它。原创 2023-01-18 15:42:22 · 1625 阅读 · 74 评论 -
『初阶数据结构 • C语言』⑪ - 树的概念与结构
树的概念及结构原创 2023-01-25 14:27:01 · 688 阅读 · 35 评论 -
『初阶数据结构 • C语言』⑫ - 堆的概念&&实现(图文详解+完整源码)
堆的概念及实现原创 2023-01-26 19:18:09 · 1829 阅读 · 72 评论 -
『初阶数据结构 • C语言』⑬ - 堆排序详解【附完整源码】
你是否对堆排序早有耳闻?身为经典排序算法中的佼佼者,我们着实有必要学习一下堆排序的实现。接下来我们就一起认识一下堆排序是如何依靠它优秀的结构及算法在众多的排序算法中脱颖而出的。原创 2023-02-03 21:35:14 · 1230 阅读 · 66 评论 -
『初阶数据结构 • C语言』⑭ - C语言实现用堆解决 TOP-K 问题
生活中我们经常能见到TopK问题,例如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。所以,TopK问题即求出一组数据中前K个最大或最小的元素,一般情况下,数据量都比较大。对于TopK问题,我们首先想到的可能是排序,对数据排好序以后,取前K个元素。但是,面对庞大的数据量时,排序并不适用,因为加载庞大的数据到内存中是个不小的消耗。所以,对于TopK问题,最佳的解决方式是用堆原创 2023-02-23 10:00:00 · 1724 阅读 · 103 评论 -
『初阶数据结构 • C语言』⑮ - 二叉树的遍历(前序、中序、后序)
认识二叉树结构最简单的方式就是遍历二叉树。所谓遍历二叉树就是按照某种特定的规则,对二叉树的每一个节点进行访问,且每个节点只访问一次。二叉树遍历的规则一般有四种:前序遍历、中序遍历、后序遍历和层序遍历。其中,前三种较为简单且实现方式大同小异。1.前序遍历:先访问根节点,再遍历左右子树;2.中序遍历:先遍历左子树,再访问根节点,再遍历右子树;3.后序遍历:先遍历左子树,再遍历右子树,再访问根节点。简单记忆:前(根,左,右)、中(左,根,右)、后(左,右,根)。原创 2023-03-08 16:06:22 · 4446 阅读 · 49 评论 -
『初阶数据结构 • C语言』⑯ - 二叉树的层序遍历
之前介绍了二叉树的前、中、后序三种遍历,采用的是递归的方式。今天我们来学习另外一种遍历方式——层序遍历。层序遍历不容小觑,虽然实现方法并不难,但是它所采取的思路是很值得学习的,与前三者不同,我们将采用非递归的方式实现。层序遍历:从二叉树的根节点出发(设根节点所在为第一层),从上到下,从左到右的一次访问第一、第二、第三......层的节点。原创 2023-03-08 21:14:14 · 807 阅读 · 44 评论 -
二叉树经典14题——初学二叉树必会的简单题
二叉树经典14题原创 2023-03-09 10:40:30 · 1884 阅读 · 70 评论 -
『初阶数据结构 • C语言』⑱ - 归并排序有多简单?一幅图教你看懂
归并排序的递归实现代码实现归并排序的非递归实现代码实现归并排序的思想很简单——分治法。简单地说,归并排序的是将序列拆分成几段子序列,将每一段子序列分别进行排序,排好之后再将有序的子序列归并(有点像合并两个有序数组)成为一个有序的序列。原创 2023-03-13 16:32:26 · 611 阅读 · 39 评论 -
『初阶数据结构 • C语言』⑲ - 一分钟学会计数排序
计数排序是一种非比较排序。它的主要思想是建立一个临时数组 CountArr ,用来统计序列中每个元素出现的次数,例如若序列元素 n 一共出现了 m 次,则使 CountArr [n] = m;统计完毕后。根据统计的结果,将序列按顺序插入到原数组中即完成排序。计数排序时间复杂度为O(N+range),空间复杂度为 O(range)。计数排序看着貌似比快排还要厉害,但是它的局限性较高。计数排序适合范围集中的数据,并且只适合整型数据。原创 2023-03-14 12:26:35 · 1066 阅读 · 26 评论 -
『初阶数据结构 • C语言』⑰ - 快速排序(hoare法、挖坑法、前后指针法与非递归实现)
快速排序是霍尔大佬在1962年提出的排序方法,因其出色的排序效率使得它成为使用最广泛的排序算法。快速排序之所以敢叫做快速排序,自然是有一定的道理,今天我们就来看看快速排序是如何凌驾于其它算法之上的。快速排序的基本思想是:任取待排序数列中的一个数作为 key 值,通过某种方法使得 key 的左边所有的数都比它小,右边的数都比它大;以 key 为中心,将 key 左边的数列与右边的数列取出,做同样的操作(取 key 值,分割左右区间),直至所有的数都到了正确的位置。原创 2023-03-11 22:41:00 · 1000 阅读 · 84 评论