![](https://img-blog.csdnimg.cn/direct/5c37d110cbae48e18cd04abee3d8ae83.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法系统精讲
文章平均质量分 95
本专栏记录数据结构与算法的基本理论,方便复习与巩固理论知识。欢迎交流分享!
未来可期,静待花开~
刚入行的技术猿一枚,记录学习过程中重要技术理论,谢谢关注,欢迎交流分享!
展开
-
数据结构一:算法效率分析(时间复杂度和空间复杂度)-重点
本篇博客详细总结如何计算一个算法的时间复杂度和空间复杂度,根据代码的编写形式分为:非递归式(循环)和递归代码的时间复杂度,空间复杂度计算,根据出题的形式又可分为:给定代码计算时间复杂度和空间复杂度,或者给定题目请设计算法同时给出时间复杂度和空间复杂度;后者作为笔试面试的重点考查方式,需要重点掌握!原创 2024-01-20 17:32:49 · 1247 阅读 · 0 评论 -
数据结构二:线性表之顺序表(不定长顺序表)的设计与实现
本篇博客详细总结数据结构中的第一种结构:线性表之不定长顺序表,主要从以下几个方面梳理:线性表的定义、顺序表的概念、顺序表的基本操作:增删改查的基本思想及代码实现、基本操作的算法效率分析(时间复杂度和空间复杂度)、顺序表的优缺点适用场合,以及常见的面试题。原创 2024-01-22 16:20:38 · 1100 阅读 · 0 评论 -
数据结构三:线性表之单链表(带头结点单链表设计)的设计
线性表的链式存储结构正是所谓的单链表,何谓单链表?通过地址将每一个数据元素串起来,进行使用,这可以弥补顺序表在进行任意位置的插入和删除需要进行大量的数据元素移动的缺点,只需要修改指针的指向即可;单链表的种类又可划分为很多种,本篇博客详细介绍带头结点单链表的设计与实现,掌握单链表的关键是要进行画图分析;单链表同时也是笔试和面试的必考点,因此,掌握好该章节非常重要!原创 2024-01-23 19:45:11 · 1257 阅读 · 2 评论 -
数据结构四:线性表之带头结点的单向循环链表的设计
单向循环链表的插入,删除算法与单链表基本一致,所不同的是若操作在链表的尾部进行,则判断条件发生变化不同,以让单链表继续保持循环的性质。因此,需要记住循环链表判空和判断是否为尾巴结点的条件!即循环链表中没有NULL指针。涉及遍历操作时,其终止条件就不再是像非循环链表那样判别p或p->next是否为空,而是判别它们是否等于某一指定指针,如头指针或尾指针等。原创 2024-04-25 22:45:06 · 1508 阅读 · 2 评论 -
数据结构五:线性表之带头结点的双向链表的设计
在单向链表中,如果要删除某个结点,必须先找到其前驱结点。而在双向链表中,由于每个结点都包含指向前驱结点的指针,因此无需查找前驱结点即可删除该结点。这种特性使得双向链表的删除操作更加简便和高效。因此,一个操作涉及到找一个结点的前驱结点时,双向链表是非常方便的,只需要访问它的前驱指针!!!双向链表有很多地方存在特殊情况,需要单独处理,因此,我们需要不断巩固,加深对于双向链表的理解,才能够灵活运用!原创 2024-04-27 18:34:07 · 775 阅读 · 0 评论 -
数据结构六:线性表之顺序栈的设计
顺序栈的元素在内存中是连续存储的,这使得访问元素非常高效。由于数组支持随机访问,因此可以直接通过索引访问栈中的任何元素,而不需要下一节讲的链式栈那样遍历链表。顺序栈的实现比较简单,不需要额外的指针来维护元素之间的关系,只需要一个数组和一个指向栈顶的索引即可。这使得其在空间和时间复杂度上都比较高效。顺序栈适用于大多数栈的应用场景,无论是简单的数据处理还是复杂的算法实现,都可以方便地使用顺序栈来完成。4. 易于实现。原创 2024-04-26 10:01:17 · 1015 阅读 · 1 评论 -
数据结构七:线性表之链式栈的设计
从以上分析,我们可以知道链式栈只是单链表的一种特殊情况,限定了数据元素的插入和删除位置,链式栈是一种基于单链表实现的栈,在空间复杂度上,顺序栈在创建时就申请了数组空间,若栈经常处于不满状态将造成存储空间的浪费;链式栈所需空间是根据需要随时申请的,比之顺序栈仅仅是其每个结点需要额外的空间以存储其next指针域。在时间复杂度上,对于针对栈顶的基本操作(压入、弹出和栈顶元素存取),容易看出,顺序栈和链式栈的时间复杂性均为O(1)。原创 2024-04-27 03:56:45 · 818 阅读 · 0 评论 -
数据结构八:线性表之循环队列的设计
上篇博客,学习了栈,我们可以知道他也是一种线性表,遵从先进后出的原则,在本节,我们进一步学习另一种线性表—队列。就像饭堂里排队打饭的的队伍,作为一种先进先出的线性表,他又有哪些特别之处呢?又该如何应用呢?接下来,跟我走近队列的世界里。目录一、队列的应用场景二、队列的基本概念和结构2.1 队列的基本概念2.2 队列的结构2.3 队列的实现方式三、循环队列栈的接口函数实现3.0 循环队列设计的思想来源3.0.1 从数组存放的角度分析3.0.2 从时间复杂度的角度分析3.1 循环队列的三个关键问题及如何解决?3原创 2024-04-27 12:03:30 · 1105 阅读 · 0 评论 -
数据结构九:线性表之链式队列的设计
现在,我们可以知道,其实从本质上来讲,链式队列就是重新设计头节点的单链表结构,并且只允许头删和尾插(队尾入队头出);对于循环队列与链队列的比较,可以从两方面来考虑,从时间上,其实它们的基本操作都是常数时间,即都为O(1)的,不过循环队列是事先申请好空间,使用期间不释放,而对于链队列,每次申请和释放结点也会存在一些时间开销,如果入队出队频繁,则两者还是有细微差异。对于空间上来说,循环队列必须有一个固定的长度,所以就有了存储元素个数和空间浪费的问题。原创 2024-04-30 01:00:32 · 683 阅读 · 1 评论 -
数据结构十:哈希表
之前学习的这么多抽象数据结构类型,例如顺序表,单链表..., 他们有一个共同的特点:数据的存储地址和数据本身是没任何关系的,它是随机的,在这些结构中进行查找,因为不知道key(关键字)和记录在结构中存储位置的关系,所以只能让key和结构中的记录进行一一比较,但是不一定是每个记录都要与key进行比较。在顺序查找时,比较的结果有"=“和"≠"两种可能。在二分查找,比较的结果有”>“,”原创 2024-05-05 20:23:53 · 1173 阅读 · 0 评论 -
数据结构十一:数组相关经典面试题
上述这种思想,就可以达到把原数组等于待删除元素的值全部覆盖,从而达到删除的效果!原创 2024-05-06 22:54:13 · 905 阅读 · 2 评论 -
数据结构十三:八大排序算法
所谓排序,就是使一串记录/数据,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小, 插入排序对于有序的序列效率很高。原创 2024-05-11 22:17:38 · 852 阅读 · 3 评论