
深入数据结构 - 从基础到实战
文章平均质量分 94
我们将以直观、易于理解的方式解释如栈、队列、链表、树、图等经典结构的原理,也不会遗漏哈希表、堆、搜索树等高级主题。通过丰富的示例、图解和代码片段,您将不仅能够把握它们是怎样工作的,还能理解它们为什么有效、如何选择以及应用到具体问题中。
xxxhuxxx
与君共勉,齐头并进!
展开
-
【数据结构查找算法篇】----二分查找【实战项目】
想象一下,你在一座图书馆里的一排排整齐排列的书架前,这些书按照字母顺序摆放着,你需要找到一本名字以字母"M"开头的书。先站在书架的中间位置,这大致相当于字母顺序的“M”附近。如果你手上的书以字母“S”开头,那么你知道“M”开头的书应该在你左边的上。你忽略右半部分的书架,将范围缩小到左半部分。然后你去左边书架的中间位置,重复进行查找。如果这次拿到的书以字母“G”开头,意味着“M”会在你右手边的书架上。再次缩小范围,只考虑“G”和“S”之间的部分,并在这个缩小后的范围内继续寻找。原创 2024-02-26 14:19:24 · 1500 阅读 · 0 评论 -
【数据结构排序算法篇】----对十大经典算法的总结
我们已经将所有的排序算法讲解完毕,通过对数组进行排序和面试题的训练,相信大家收获了干货,今天我们就来对排序算法进行总结,讨论在不同场景下应该挑选什么样的算法,这也是实际开发中我们经常需要思考的问题。对实时系统中小数据集进行排序:插入排序或希尔排序。对大数据集进行内存中的排序:快速排序、堆排序或归并排序。对巨量数据集进行外部排序:外部归并排序。对有限范围整数进行排序:计数排序、基数排序或桶排序。要求稳定排序:归并排序、冒泡排序、插入排序。对性能有极度要求,可以预知数据分布。原创 2024-02-20 03:00:00 · 1123 阅读 · 0 评论 -
【数据结构查找算法篇】----线性查找【实战项目】
在数据结构中,有许多查找算法,它们根据数据的存储结构方式和结构的特点而有所区别,关于数据结构查找算法的学习,博主会依次详细的介绍现在比较常见的查找算法,通过对算法的介绍,搭配Java的实战项目,更深层次的对算法进行讲解。今天,我们就来介绍一下比较简单的查找算法----线性查找。线性查找,也叫顺序查找(Sequential Search),是一种最基本的查找算法。它适用于元素随机排列的数组(或者其他线性数据结构,如链表)。这种查找算法不要求数据被排序。线性查找的工作原理是。原创 2024-02-23 14:13:58 · 1565 阅读 · 0 评论 -
链表全景:探索单链表、双向链表与循环链表【实战演练】
链表在数据结构中的重要性是无法替代的,无论是动态增删节点,还是对内存的利用,实现多种复杂结构,甚至在预分配内存等方面都有很好的表现。今天我们就依次对单链表,双向链表,循环链表进行讲解。链表的介绍就到这里,链表虽然简单,但是贯穿整个数据结构,我们需要了解底层原理,便于我们更好的解决实际开发中遇到的问题。!!原创 2024-02-21 23:18:29 · 1083 阅读 · 0 评论 -
【数据结构排序算法篇】----桶排序【实战演练】
我们刚刚学完计数排序,今天我们再来讲讲桶排序,实际上桶排序就是计数排序的拓展版本,下面我们就来讲解一下桶排序。桶排序是一种分布式排序算法,它将元素分散到多个“桶”里进行排序。这里的“桶”可以理解为一系列的分类槽,每个槽会根据元素的一个特性来收集这些元素。通常,桶排序用于当输入数据均匀且独立分布在一个范围内时。初始化桶:创建一定数量的桶,这些桶可以是数组、链表或者其他集合。分配元素到桶中:遍历需要排序的元素,根据规则(如元素的大小或者其他属性)将它们放入对应的桶中。对每个桶内部排序。原创 2024-02-18 09:45:56 · 1127 阅读 · 0 评论 -
【数据结构排序算法篇】----计数排序【实战演练】
关于计数排序,我们在考研中或者平时练习中还是比较难以见到的,但在工作中,我们还是必须要学会正确使用。计数排序(Counting Sort)是一种非比较型的线性时间复杂度的排序算法,最适合于一定范围内的整数排序问题。它是一个整数排序算法,且只能用在待排序元素的值是有限范围的情况下。扫描待排序数组,假设数组中有n个数,并找出数组中的最大值max。开辟一个长度为max+1的计数数组,以记录每个值为i的元素出现的次数,初始化为0。再次扫描原始数组,对于数组中的每个数值,将计数数组对应数值的计数加一。原创 2024-02-14 06:00:00 · 2068 阅读 · 0 评论 -
【数据结构排序算法篇】----希尔排序【实战演练】
大家好!新年快乐哦,年后我们学习还要继续,博主依然要定时发文,今天我们一起来讲讲另一个排序算法----希尔排序希尔排序是一种基于插入排序的排序算法,由Donald Shell于1959年提出。其关键的概念是将原来要排序的列表划分成若干个较小的子列表,分别进行插入排序,然后逐渐减少子列表的数量,直到全列表作为一个列表来对待进行插入排序为止。这种方法中,每个子列表实际上是间隔一定"增量"的一组元素构成的。选择一个增量序列,其中ti > tjtk = 1(通常使用序列中每个元素作为n/2的结果,n。原创 2024-02-13 06:00:00 · 2441 阅读 · 0 评论 -
【数据结构排序算法篇】----堆排序【实战演练】
继续继续继续,今天我们还是排序算法,认识新的排序算法----堆排序堆排序是一种基于比较的排序算法,它利用二叉堆这种数据结构的特性来对元素进行排序。最大堆:任何一个父节点的值都大于或等于它的孩子节点的值。最小堆:任何一个父节点的值都小于或等于它的孩子节点的值。在堆排序算法中,最大堆用于升序排序,而最小堆则用于降序排序。建立堆:将待排序的数组构造成一个最大堆(升序排序)。这个步骤是将数组转换成最大堆的过程,通常可以从最后一个非叶子节点开始向上进行调整。堆排序从堆中逐个取出元素进行排序;原创 2024-02-10 07:00:00 · 2279 阅读 · 2 评论 -
【数据结构排序算法篇】----基数排序【实战演练】
今天我来继续聊聊数据结构排序算法----基数排序基数排序是一种非比较型整数排序算法,它的工作原理是按照数字的每一位来分配和收集元素。这种排序方式通常用于排序数字(尽管它也可以用于排序其他类型的数据,比如字符串),它可以处理从小到大的各个数字位,这被称作“最低位优先”(LSD)方法,或者从大到小的各个数字位,称为“最高位优先”(MSD)方法。基数排序的基本思想是将所有待比较的数字统一为相同的位数长度,位数较短的数字前面补零。然后,从最低位开始,依次进行一次分配和收集。原创 2024-02-17 20:36:10 · 3131 阅读 · 0 评论 -
【数据结构排序算法篇】----快速排序【实战演练】
学习快速排序,最重要的就是学会分治思想,对于pivot的选择有很多种,这让我们产生了如何使用更加合适的pivot时代码变得更加高效,下面我们就开始谈谈快速排序。快速排序是一个高效的排序算法,由C.A.R. Hoare在1960年提出。因其平均时间复杂度为O(n log n)而被广泛使用,并且还具有原地排序(不需要额外大量的内存空间)的优点。这种算法的基本思想是分治策略,通过一个称为"pivot"(中枢或枢轴)的元素来将原数组分割成两个子数组。选择pivot(枢轴元素)从数组中选择一个元素作为pivot。原创 2024-02-08 07:00:00 · 1585 阅读 · 0 评论 -
【数据结构排序算法篇】----归并排序【实战演练】
我们继续学习下一个排序,归并排序,这是一个重要的排序,排序思想也很重要,这种排序也很高效,希望同学们可以认真阅读。归并排序(Merge Sort)是一种高效的排序算法,采用分治的策略来对数组或列表进行排序。基本思想是将原始数组分成若干子数组,对每个子数组进行排序,然后将它们合并成一个全部有序的数组。分解:递归地将当前数组分成两个长度差不多的子数组。解决:递归地对子数组进行归并排序,如果子数组长度是 1 或者更小,则不需要继绀做分解,因为长度为 1 的数组自然而然就是有序的。合并。原创 2024-02-07 08:00:00 · 1084 阅读 · 1 评论 -
【数据结构排序算法篇】----插入排序【实战演练】
继续学习下一个排序算法----插入排序,我们废话不多说,直接进入主题吧插入排序是一种简单直观的排序算法,它的工作方式类似于我们整理手中扑克牌的方式。开始时我们左手为空并且桌子上的牌面朝下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右向左将它与手中已有的牌相比较。数组中实现就是从数组的第二个元素开始把待插入的元素复制为一个副本(记作 key)。比较其与之前元素的大小,如果 key 更小,则之前元素向后移动一位。原创 2024-02-06 15:20:15 · 885 阅读 · 1 评论 -
【数据结构排序算法篇】----选择排序【实战演练】
前面我们已经学习了较为简单的冒泡排序,相信大家对排序也有了新的认识,今天我们就来谈谈选择排序,通过对选择排序的讲解,搭配各种实战题目,来加强大家对排序算法新的认识,也希望同学们可以看完讲解后先将题目做一做。选择排序是一种简单直观的比较排序算法。它的基本思想是:首先通过比较找出最小(或最大)元素,然后将它和数组的第一个元素交换。接下来,再从剩下的元素中找出最小(或最大)的元素,再与数组的第二个元素交换。如此继续,直到整个数组排序完成。原创 2024-02-06 15:01:23 · 1312 阅读 · 1 评论 -
【数据结构排序算法篇】----冒泡排序【实战演练】
冒泡排序顾名思义,想泡泡一样慢慢冒上去,今天,我们就来深刻理解冒泡排序的排序步骤,通过一些联系给大家讲解如何解决有关冒泡排序算法的一些问题。冒泡排序(Bubble Sort)是一种基础的排序算法。它的工作原理是通过重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素为止,这时数列就完全排序好了。冒泡排序的名称来自于较小的元素会像“气泡”一样逐渐通过交换“浮”到数列的顶端,而较大的元素则沉到底部。原创 2024-02-05 16:41:16 · 1111 阅读 · 1 评论 -
【数据结构】----先来聊聊【排序】(先导片)
我们开始算法与数据结构专栏,讲解基础算法,无论在学习那种编程语言,都要求我们能够熟练掌握各种算法。数据结构与算法是计算机科学中最基础,也是最核心的学科之一。提高程序效率: 合理地使用数据结构可以显著提升程序的性能,比如时间复杂度和空间复杂度。解决问题能力: 对数据结构的了解能帮助你更好地分析问题并选择或设计出合适的解决方案。代码组织: 数据结构能帮助你组织和管理数据,使得代码更加清晰、易于维护。库和框架的使用。原创 2024-02-04 16:19:55 · 907 阅读 · 1 评论