数据结构与算法学习
文章平均质量分 87
Harold.li
梦想是买下一座像拉奈岛那样的岛屿
展开
-
数据结构与算法学习01-概述
数据类型指一组性质相同的值的集合及定义在此集合上的一些操作的总称;原子类型:是不可以再分解的基本类型,包括整型、实型、字符型……结构类型:同若干个类型组合而成,是可以再分解的。如整型数组是由若干个整型数据组成的。抽象数据类型是指一个数学模型及定义在该模型上的一组操作。“抽象”的意义在于数据类型的数学抽象特性。抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性。数据结构是...转载 2018-09-27 18:00:23 · 94 阅读 · 0 评论 -
数据结构与算法16-图的存储结构
图的存储结构图的存储结构相较线性表与树来说就更加复杂了。首先,我们口头上说的“顶点的位置”或“邻接点的位置”只是一个相对的概念。其实从图的逻辑结构定义来看,图上任何一个顶点都可被看成是第一个顶点,任一顶点的邻接点之间也不存在次序关系。如下图 用之前学过的数据结构来表示图,不是很方便邻接矩阵考虑到图是由顶点和边或弧两部分组成。合在一起比较困难,那就很自然地考虑到分两个结构来分...转载 2018-09-28 21:31:11 · 826 阅读 · 0 评论 -
数据结构与算法17-图的十字链表
对于有向图来说,邻接表是有缺陷的,关心了出度问题,想了解入度就必须要遍历整个图才能知道,反之,逆邻接表解决了入度的情况。把邻接表与逆邻接表结合起来,即有向图的一种存储方法十字链表(Orthogonal List)。我们重新定义顶点表结构firstin表示入边表头指针,指向该顶点的入边表中第一个结点;firstout表示出边表头指针,指向该顶点的出边表中第一个结点;重新定...转载 2018-09-28 21:32:34 · 620 阅读 · 0 评论 -
数据结构与算法18-图的遍历
从图中某一个顶点出发访遍图中其余顶点,且使每个顶点权被访问一次,这一过程就叫做图的遍历(Traversing Graph)。 深度优先遍历(Depth_First_Search)从图中某个顶点v出发,访问此顶点,然后从v的未被访问的邻接点出发深度优先遍历图,直至图中所有和v有路径想通的顶点都被访问到。事实上,我们这里讲到的是连通图,对于非连通图,只需要对它的连通分量分别进行深度...转载 2018-09-28 21:34:24 · 1170 阅读 · 0 评论 -
数据结构与算法19-图的最小生成树
我们把构造连通网的最小代价生成树称为最小生成树(Minimum Cost Spanning Tree) 普里姆(Prim)算法 也就是说,现在我们已经有一个存储结构MGraph的G,它的arc二维数组如图所示。数组中我们用65535代表∞于是普里母算法代码如下。其中INFINITY权值极大值,这里用65535代表,MAXVEX为顶点个数最大值,此处大于等于9即可。...转载 2018-09-28 21:43:28 · 2354 阅读 · 0 评论 -
数据结构与算法20-图的最短路径
最短路径对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点。迪杰斯特拉算法 它并不是一下子就求出V0到V8的最短路径,而一步步求出它们之间顶点的最短路径,过程中都是基于已经求出的最短路径的基础上,求得更远顶点的最短路径,最终得到你要的结果。我们来看一下思路1. 顶点v0到v1的最短距离,答案是...转载 2018-09-28 21:45:55 · 1442 阅读 · 0 评论 -
数据结构与算法21-图的拓扑排序
拓扑排序学了两个有环的图应用,现在我们来谈谈无环的图应用。无环,即是图中没有回路的意思。拓扑排序介绍在一个表示工作的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样有向图为顶点表示活动的网,我们称为AOV网(Activity On Vertex Nextwork)。AOV网的弧表示活动之间存在的某种制约关系。比如演职人员确定了,场地也联系好啦,才可以开始进场拍摄...转载 2018-09-29 18:01:37 · 534 阅读 · 0 评论 -
数据结构与算法22-图的关键路径
关键路径拓扑排序主要是为解决一个工程能否顺序进行的问题,但有时我们还需要解决工程完成需要的最短时间问题。比如造一辆汽车,我们需要先造各种各样零件、部件,最终再组装成车,假如,造一个轮子需要0.5天时间,造一个发动机需要3天时间,造一个车底盘需要2天时间,造一个外壳需要2天时间,其他零部件时间需要2天,全部零部件集中到一处需要0.5天,组装成车需要2天,问汽车厂造辆车,最短需要多少时间呢?一...转载 2018-09-29 18:04:15 · 560 阅读 · 0 评论 -
数据结构与算法23-查找
查找概念查找表(Search Table)是由同一类型的数据元素(或记录)构成的集合。关键字(Key)是数据元素中某个数据的值。又称为键值。可以标识一个记录的某个数据项(字段),我们称为关键码。若此关键字可以唯一地标识一个记录,则称此关键字为主关键字(Primary Key)。这说明对不同的记录,其主关键字均不相同。主关键字所在的数据项称为主关键码。对于那些可能识别多个数据元素...转载 2018-09-29 18:06:19 · 268 阅读 · 0 评论 -
数据结构与算法24-线性索引查找
线性索引查找有此数据集可能增长非常快,例如,某些微博网站或大型论坛的帖子和回复总数每天都是成百万上千万条,或者一些服务器的日志信息记录也可能是海量数据,要保证记录全部是按照当中的某个关键字有序,其时间代价是非常高昂的,所以这种数据都是按先后顺序存储的。对于这样的查找表,我们如何能够快速 查找到需要的数据呢?办法就是----索引索引是 了加快查找速度而设计的一种数据结构。索引就是把一...转载 2018-09-29 18:07:36 · 243 阅读 · 0 评论 -
数据结构与算法25-散列表查找(哈希表)
散列表查找(哈希表)我们只需要能过某个函数f,使得存储位置=f(关键字)那样我们可以通过查找关键字不需要比较就可获得需要的记录的存储位置。这就是一种新的存储技术-----散列技术。散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录...转载 2018-09-29 18:08:53 · 160 阅读 · 0 评论 -
数据结构与算法26-排序
排序最简单的排序实现冒泡排序(Bubble Sort)一种交换排序,它的基本思想是:两两比较相邻记录的的关键字,如果反序则交换,直至没有反序记录为止。如下:/*对顺序表L作交换排序(冒泡排序初级版)*/void BubbleSort0(SqList *L){ int i,j; for(i=1;i<L->...转载 2018-09-29 18:13:55 · 289 阅读 · 0 评论 -
数据结构有关排序
直接插入排序,折半插入排序,希尔排序https://www.cnblogs.com/kubixuesheng/p/4353575.html交换类:冒泡排序,递归的快速排序https://www.cnblogs.com/chengxiao/p/6104371.html选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序https://www.cnblogs.com/kubixuesh...转载 2018-11-22 17:26:00 · 94 阅读 · 0 评论 -
数据结构与算法15-图的基本数据操作
基本数据操作ADT 图(Graph)Data 顶点的有穷非空集合和边的集合Operation CreateGraph(*G,V,VR):V点集,VR边弧集的定义构造图G DestroyGraph(*G):图存在则销毁 LocateVex(G,u):若图G中存在顶点u,则返回图中的位置 ...转载 2018-09-28 21:29:08 · 331 阅读 · 0 评论 -
数据结构与算法14-二叉排序树
二叉排序树又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树,1. 若它的左子树不空,则左子树上的所有结点的值均小于它的根结构值2. 若它的右子树不空,则右子树上的所有结点的值均大于它的根结点值3. 它的左、右子树也分别为二叉排序树。 二叉排序树查找操作首先我们提供一个二叉树的结构typedef struct BiTNode...转载 2018-09-28 21:28:12 · 528 阅读 · 0 评论 -
数据结构与算法02-----线性表
线性表(List):零个或多个数据元素的有限序列。元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。线性表强调是有限的,元素个数是有限的。事实上在计算机中处理的对象都是有限的,那些无限的数列,只存在于数学的概念中。所以线性表元素的个数n(n0)定义为线性的长度,当n=0时,称为空表。注意:在复杂的线性表中,一个数据元素可以由若干个...转载 2018-09-27 18:07:31 · 134 阅读 · 0 评论 -
数据结构与算法03--线性链表
顺序存储结构不足的解决办法前面我们讲的线性表的顺序存储结构。它是有缺点的,最大的缺点就是插入和删除时需要移动大量元素。线性表链式存储结构定义线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素,这组存储单元可以是连续的,也可以是不连续的。这就意味着,这些数据元素可以存在内存未被占用的任意位置。为了表示每个数据元素ai与其直接后继数据元素ai+1之间的逻辑关系,对数据元...转载 2018-09-27 18:10:32 · 148 阅读 · 0 评论 -
数据结构与算法04-单循环链表
循环链表将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)它解决了一个很麻烦的问题:如何从当中一个结点出发,访问到链表的全部结点。为了使空链表与非空链表处理一致,我们通常设一个头结点,当然这并不是说,循环链表一定要头结点。其实循环链表和单链表的主要差异就在于循环的判断条件...转载 2018-09-27 18:13:10 · 334 阅读 · 0 评论 -
数据结构与算法05-栈与队列
栈是限定仅在表尾进行插入和删除操作的线性表。队列是只允许在一端进行插入操作、而在别一端进行删除的操作的线性表。栈的定义栈是限定仅在表尾进行插入和删除操作的线性表。我们把允许插入和删除的一端称为栈顶。另一端称为栈底,不含任何数据元素的栈称为空栈。又称后进先出线性表(LIFO结构)理解:首先它是一个线性表,也就是说,栈元素具有线性关系,即前驱后继关系。只不过它是一种特殊的线性表而已。特殊之...转载 2018-09-27 18:14:32 · 104 阅读 · 0 评论 -
数据结构与算法06-栈的应用
栈的应用栈的引入简化了程序设计的问题,划分了不同关注层次,使得思考范围缩小,更回聚集于我们要解决的问题核心。反之像数组等,因为要分散精力去考虑数组的下标增减等细节问题,反而掩盖了问题的本质栈的应用—-递归定义:把一个直接调用自己或通过一系列的调用语句间接地调用自己的函数,称做递归函数。每个递归定义必须至少有一个条件,满足时递归不再进行,即不再引用自身而是返回值退出。迭代和递归的区别是:...转载 2018-09-27 18:15:30 · 101 阅读 · 0 评论 -
数据结构与算法07-队列
队列的定义队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队列的抽象数据类型同样是线性表,队列也有类似线性表的各种操作,不同的就是插入数据只能在队尾进行,删除数据只能在队头进行。ADT 队列(Queue)Data 同线性表。元素具有相同类型,相邻元素具有前驱和后继...转载 2018-09-27 18:17:09 · 321 阅读 · 0 评论 -
数据结构与算法08-串
串定义:是由零个或多个字符组成的有限序列,又名叫字符串。 串的比较串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集中的序号。ASCII编码,由7位二进制数表示一个字符,总共可以表示128个字符扩展ASCII码,由8位二进制数表示一人字符,总共可以表示256个字符Unicode编码由16位二进制数表示一个字符,总共就可以表示216 约6...转载 2018-09-27 18:21:13 · 204 阅读 · 0 评论 -
数据结构与算法09-树
树的定义之前我们一直在谈是一对一的线性结构,可现实中,还有很多一对多的情况需要处理,所以我们需要研究这种一对多的数据结构------“树”,考虑它的各种特性,来解决我们在编程中碰到的相差问题。树是n个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根的结点;(2)当n>1时其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每...转载 2018-09-27 18:25:16 · 531 阅读 · 0 评论 -
数据结构与算法10-二叉树
二叉树定义:二叉树(Binary Tree)是n(n 0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵不相交的、分别称为根结点的左子树和右子树的二叉树组成。 二叉树的特点l 每个结点最多有两棵子树,所以二叉存在度大于2的结点。注意不是只有两棵子树,而是最多有。没有子树或者有一棵子树都是可以的。l 左子树和右子树是有顺序的,次序不能任意...转载 2018-09-27 18:28:26 · 777 阅读 · 0 评论 -
数据结构与算法11-线索二叉树
线索二叉树线索二叉树的原理我们把指向前驱和后继的指针称为线索,加上线索的二叉链表称为线索,加上线索的二叉链表为线索链表,相应的二叉树就称为线索二叉树(Threaded Binary Tree) lchild ltag data rtag rchild 其中:l lt...转载 2018-09-28 21:20:03 · 183 阅读 · 0 评论 -
数据结构与算法12-树、森林与二叉树的转换
树和森林的二叉树转换对于树来说,在满足树的条件下可以是任意开头,一个结点可以有任意多个孩子,显然对树的处理要复杂得多,去研究关于树的性质和算法,真的不容易。有没有简单的方法来处理树呢?当然有啦~前面我们提到过的树的孩子兄弟法可以将一棵树用二叉链表进行存储,所以借助二叉链表,树和二叉树可以相互进行转换。从物理结构来看,它的二叉链表也是相同的,只是解释不太一样而已。因此,只要我们设定一定的规则...转载 2018-09-28 21:21:08 · 669 阅读 · 0 评论 -
数据结构与算法13-哈夫曼树及其应用
赫夫曼树及其应用最基本的压缩编码方法----赫夫曼编码定义与原理我们先把这两棵二叉树简化成叶子结点带权的二叉树(注:树结点间的边相差的数叫做权Weight)从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称做路径长度。如:二叉树a中,根结点到结点D的路径长度就为4,二叉树b中根结点到结点D的路径长度为2。 如图所示:其中A表示不及格、B表...转载 2018-09-28 21:23:14 · 403 阅读 · 0 评论 -
b树
https://blog.csdn.net/z_ryan/article/details/79685072https://blog.csdn.net/oxygen0106/article/details/40262829转载 2018-11-24 15:32:03 · 111 阅读 · 0 评论