![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构学习
文章平均质量分 94
数据结构复习
法苏ovo
这个作者很懒,什么都没留下…
展开
-
排序算法整理(冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序,归并排序)
排序算法 排序即将一个数据元素的任意序列,重新排列称一个按关键字有序的序列。 根据在排序过程中排序的记录是否全部被放置在内存中,排序分为两种,内部排序和外部排序。内部排序:在排序期间数据对象全部存放在内存的排序外部排序:在排序期间全部对象个数太多,不能同时存放在内存,必须根据排序过程的要求,不断在内存和外存之间移动的排序。对于排序来说,只有两个最基本的操作,第一个就是比较,比较不同数据之间的关键字的大小关系;第二个就是移动,在得到比较结果之后,按照一定的规则来移动元素使其最终有序。文章目原创 2021-08-24 01:51:06 · 947 阅读 · 0 评论 -
二叉排序树整理(创建,插入,查找,删除)
二叉排序树查找表分为静态查找表和动态查找表,其中动态查找表的含义就是表结构本身是在查找过程中动态生成的。即若表中存在其关键字等于给定值keykeykey的记录,表明查找成功,否则插入关键字等于keykeykey的记录。而动态查找表中最为典型的就是二叉排序树和哈希表,接下来重点对于二叉排序树的内容进行学习。文章目录二叉排序树二叉排序树-定义二叉排序树-查找二叉排序树-插入二叉排序树-建立二叉排序树-遍历二叉排序树-删除二叉排序树-性能分析二叉排序树-定义 空树或者是具有如下特性的二叉树被称为二叉原创 2021-09-03 01:39:00 · 8102 阅读 · 1 评论 -
哈希表与哈希查找
哈希表(哈希查找) 前面对于顺序表进行查找时,在判断当前数据是否是要查找的数据时,需要去通过“=”来进行判断,直到有了相等的关键字才返回地址。在这种查找方式中,“比较”是必不可免的,那么是否有一种方法可以避免比较,即通过关键字的某种形式来存储该数据的地址,这样在查找时,将待查询的关键字通过一定计算就可以得到目的数据的地址。文章目录哈希表(哈希查找)哈希表概念哈希函数构造方法直接定址法数字分析法平方取中法折叠法除留余数法处理冲突开放定址法线性探测二次探测再哈希法链地址法性能分析哈希表概念 哈希表,原创 2021-08-28 14:10:37 · 2047 阅读 · 0 评论 -
查找(顺序查找,折半查找,分块查找)
查找 查找是在查询数据过程中必不可少的一个环节,那么如何来进行查找,以及如何进行高效率的查找,就是接下来要解决的问题。文章目录查找查找的概念顺序查找顺序查找-算法原理顺序查找-算法实现顺序查找-性能分析折半查找折半查找-算法原理折半查找-算法实现折半查找-性能分析分块查找分块查找-算法原理分块查找-算法实现分块查找-性能分析查找的概念 首先提出一些定义,在查找元素的时候,必然是从一堆数据中去找自己想要的数据,那么这种由同一类型的数据元素构成的集合就被称为查找表。对于查找表可执行以下操作:查询原创 2021-08-27 22:08:30 · 3528 阅读 · 1 评论 -
关键路径整理
关键路径 在有了拓扑排序的基础之后,对于一个完整的流程可以进行一个先后顺序的编排。但是如果需要具体到走完该流程最短需要多少事件时,仅仅使用拓扑排序的内容是是不够的。接下来就如何求解该问题进行进一步学习。文章目录关键路径AOE−AOE-AOE−网关键活动AOE−AOE-AOE−网 在前面AOV−AOV-AOV−网的基础上,接下来提出AOE−AOE-AOE−网的概念。**如果使用有向图的顶点表示事件,用弧表示活动,用弧上的权值表示活动的持续时间,这种有向图的弧表示活动的网,称之为AOE−AOE-AO原创 2021-08-19 23:16:46 · 334 阅读 · 0 评论 -
拓扑排序原理及实现
拓扑排序文章目录拓扑排序AOV−AOV-AOV−网拓扑排序 拓扑排序主要是应用在有向无环图中的一种排序方法,在一个有向无环图中,所有的事情都存在一个先后关系。举个简单的例子,大学里面专业课的学习,部分专业课需要有高等数学的基础才可以进行学习,这个也叫做先修课程。但是同时有的可能也可以并行的学习,因为两者没有交叉,互不影响。接下来举一个简单的例子。 那么可以利用图结构来表达该先后关系,如下图所示。 那么在给定一个“先修课程”的关系之后,如何才能得到正确的“修读”顺序呢,这就需要使用到接下来讲原创 2021-08-18 17:20:17 · 392 阅读 · 0 评论 -
最短路径(Dijkstra算法和Floyd算法)
最短路径 在图中,不可避免要解决的一个问题就是计算两点之间的最短路径,对于图结构来说,两个点之间不一定只有一条路径,那么如何才能找出最短的那一条就是图中最短路径问题。最短路径问题在实际生活中应用十分广泛。接下来主要介绍两种较为常用的最短路径算法—DijkstraDijkstraDijkstra算法和FloydFloydFloyd算法。文章目录最短路径迪杰斯特拉DijkstraDijkstraDijkstra算法FloydFloydFloyd算法最小生成树与最短路径的区别 首先需要对最短路径问题进行原创 2021-08-18 02:50:29 · 56923 阅读 · 8 评论 -
最小生成树(Prim算法和Kruskal算法)
最小生成树 本部分主要对图中一些关于连通性和最小生成树的概念进行学习和理解,之后对于建立最小生成树的两种算法进行学习和实现。 接下来主要对于无向图进行分析,有向图也是一样的分析方法。文章目录最小生成树图的连通性以及生成树图的连通性判断最小生成树普里姆算法PrimPrimPrim克鲁斯卡尔算法KruskalKruskalKruskal图的连通性以及生成树 首先对图连通性中一些定义进行阐释:在无向图中,如果存在不连通的顶点,则该图称为非连通图。非连通图的最大连通子图叫做连通分量。若从无向原创 2021-08-15 23:56:55 · 1053 阅读 · 0 评论 -
图知识点整理(创建与DFS,BFS)
图 在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和直接后继。在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,单只能和上一层中一个元素相关,这个一对父母可以有多个孩子,但是每个孩子只能由一对父母相对应。 但是在处理复杂关系的时候,例如人与人之间的关系,这个并不能简单的使用一对一或一对多的形式来进行表示,而是要考虑多对多的一些情况。故这里引入图结构。文章目录图图的定义图的存储结构邻接矩阵邻接表图的遍历深度优先遍历DFS原创 2021-08-11 02:51:38 · 218 阅读 · 0 评论 -
赫夫曼树(Huffman树)整理
赫夫曼编码 赫夫曼编码主要用于信息压缩中,是目前压缩效率较高的一种编码方式。在实现赫夫曼编码的时候,就是使用二叉树去进行实现。 这里简单列举一个赫夫曼编码的例子,对于一个文章,提取出其中所有的词以及出现的次数,那么如何来根据这些词出现的次数来对这些词进行编码,以使得最终由编码组成的文章尽可能的短。文章目录赫夫曼编码最优二叉树赫夫曼树—构造赫夫曼树—编码赫夫曼树—解码最优二叉树 在介绍如何实现赫夫曼编码之前,首先对二叉树中的最优二叉树进行学习和理解。先来对其中一些名词进行定义:路径:从树中原创 2021-08-08 19:21:06 · 363 阅读 · 0 评论 -
二叉树整理
二叉树 树是不同于顺序表的一种新的数据结构。按照结点数量和树的结构可以将树分为很多种,本部分重点介绍二叉树的基本内容。文章目录二叉树树的定义二叉树的定义二叉树的性质二叉树的存储结构二叉树的遍历先序遍历中序遍历后序遍历二叉树的建立二叉树扩展内容二叉树的高度计算二叉树非递归实现先序遍历层次遍历带权路径和结点最大距离最长路径树的定义 首先对树的一些基本概念有一个了解。树是有n(n⩾0)n(n\geqslant 0)n(n⩾0)个结点的有限集合。如果n=0n=0n=0,称为空树。如果n>0原创 2021-08-06 02:54:05 · 403 阅读 · 0 评论 -
最通俗易懂的KMP算法原理
KMP算法原理讲解文章目录KMP算法原理讲解前言一、KMP算法的本质二、KMP核心算法三、KMP匹配总结前言其实这一期本来是打算更新一期图算法的,但是作为数据结构的助教,还是想记录和数据结构有关的一些东西,也可以理解为我想让更多的人看我写的一些东西。反正,总而言之,不管是为了什么,这一期给大家通俗易懂的讲解一下KMP算法,依旧坚持我们的宗旨,用最通俗易懂的话语来解释算法的本质!如果本文有错误,还请大家及时纠正!一、KMP算法的本质大家先不要慌,这里并不给大家讲那些复杂的原理,主要给大家讲一下原创 2020-10-25 12:52:51 · 1728 阅读 · 1 评论 -
KMP算法详解
文章目录KMP算法前置知识串的基本概念C++C++C++中stringstringstring库的函数KMP核心算法—next数组KMP匹配next数组计算例题KMP算法改进其他字符串知识点计算最长前缀后缀计算循环节补充字符使原字符串变为循环串KMP算法 KMPKMPKMP算法是字符串匹配中的一个较好的算法,它的目的是在给定一个模式串ppp和原字符串qqq中,找到ppp在qqq中第一次出现的位置。 如上图所示,可以很简单的看出字符串ppp在字符串qqq中第一次出现的位置,如果位置从1开始计算的话原创 2021-07-30 22:38:15 · 2355 阅读 · 0 评论 -
C\C++实现队列
队列 队列和栈一样,都是一种特殊的线性表。队列是只允许在一端进行插入操作,在一端进行删除操作的线性表。在队列中,允许插入的一端称为队尾,允许删除的一端称为队头。队列和生活中的排队是一个道理,例如在游乐场中排队等待过山车,新来的人只能添加在队尾,而刚结束过山车体验的人从队头离开队伍。 故队列是一种先进先出的线性表,也就是“先进来的先出去”。循环队列 在使用线性表实现队列的时候,这里以顺序表为例,也就是使用一维数组来当作队列的数据域。故对于该一维数组而言,队列的头指针和尾指针都是所必须的,因为涉原创 2021-07-28 01:01:47 · 547 阅读 · 0 评论 -
C/C++实现栈
栈 与前面的线性表相似,栈作为一种新的数据结构,也是用来保存数据的,同时栈可以使用顺序表和链表来进行实现。但是栈与线性表不同的是,栈是限定仅在表尾进行插入和删除操作的线性表。 栈是一种特殊的线性表,可以将它想象成一个薯片筒,只有一个开口。在栈中,将可以放入和拿出数据的一端称为栈顶,而另一端被称为栈底。由于栈依旧是线性表,所以栈中的元素也有前驱和后继的关系。 根据上述对于栈特点的介绍,可以知道栈在线性表的基础上,限定了插入的位置和删除的位置,只能在栈顶进行插入和删除。先插入的数据被压在更接近栈底的原创 2021-07-27 01:42:26 · 1286 阅读 · 1 评论 -
链表的基本操作
单链表 在线性表结构中,有顺序表和链表两种结构,其中顺序表虽然在查找时快速和方便,但是在插入和删除的时候则需要移动很多的无关元素。在面对一些插入删除频繁的操作时性能并不是很好,故这里提出了另一种数据结构—链表。 链表是指一类数据结构,其中有很多类型,如下所示单链表双向链表循环链表静态链表链表作为顺序表的一种改进模式,它重点强调的是两个相邻结点之间的逻辑关系,也就是某个结点和它前驱以及后继的关系。在顺序表中,这种关系主要体现在数组中连续存储,它们的数组下标也就是连续的整数。 在链表中原创 2021-07-26 02:07:27 · 402 阅读 · 0 评论 -
线性表的基本操作
线性表 线性表总的来说其实就是一个简单的一维数组,那么从这里就可以看出线性表的特点—有限,因为数组在定义的时候就需要声明数组的空间大小,或者说是可以保存到数据元素的个数。同时根据数组的特点,线性表中每个元素,除了头和尾,都有一个直接前驱和直接后继,例如对于元素a[i]a[i]a[i],它的直接前驱就是a[i−1]a[i-1]a[i−1],直接后继就是a[i+1]a[i+1]a[i+1]。 接下来根据上述线性表的特点,先设计出线性表的抽象数据类型,也就是使用一个结构体将线性表中所有的信息进行综合。那么原创 2021-07-21 01:56:40 · 1819 阅读 · 0 评论