数据结构与算法
文章平均质量分 79
RUNA22
这个作者很懒,什么都没留下…
展开
-
数据结构与算法---排序算法
排序在排序问题中,通常将数据元素称为记录。一显然我们输入的是一个记录集合,排序后输出的也是一个记录集合。一所以我们可以将排序看成是线性表的一种操作。排序的依据是关键字之间的大小关系,那么对同一记录集合,针对不同的关键字进行排序,可以得到不同序列。影响排序算法性能的几个要素时间性能辅助空间算法的复杂性冒泡排序冒泡排序的基本思想: 两两相邻记录的关键字,如果反序则交换,直到没有反序的记录为止!冒泡排序的要点1.两两注意是相邻的两个元素的意思2.如果有n个元素需要比较n-.原创 2021-05-14 14:53:55 · 126 阅读 · 0 评论 -
数据结构与算法---二叉排序树
二叉排序树二叉排序数(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:一若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;一若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;一它的左、右子树也分别为二叉排序树(递归)。平衡二叉排序树要么Ta是一棵空树,要么Ta的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1。平衡二叉排序树不是平衡二叉排序树...原创 2021-05-14 11:26:31 · 1094 阅读 · 0 评论 -
数据结构与算法---查找算法
查找算法静态查找: 数据集合稳定,不需要添加,删除元素的查找操作。动态查找: 数据集合在查找的过程中需要同时添加或删除元素的查找操作。查找结构对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们再对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法等来提高查找的效率。对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从第一个(或者最后一个原创 2021-05-12 15:48:58 · 227 阅读 · 0 评论 -
数据结构与算法---图的遍历
深度优先遍历深度优先遍历(DepthFirstSearch),也有称为深度优先搜索,简称为DFS。它的具体思想类似于课程开头讲的找钥匙方案,无论从哪一间房间开始都可以,将家间内的墙角、床头柜、床上、床下、衣柜、电视柜等挨个寻找,做到不放过任何一个死角,当所有的抽屉、储藏柜中全部都找遍,接着再寻找下一个房间。我们可以约定右手原则:在没有碰到重复顶点的情况下,分叉路口始终是向右手边走,每路过一个顶点就做一个记号。迷宫走完了,所有的顶点也遍历过了,这就是深度优先遍历!反应快的童鞋一定会感觉深度优.原创 2021-05-12 14:33:48 · 566 阅读 · 0 评论 -
数据结构与算法---图的存储结构
邻接矩阵(无向图)考虑到图是由顶点和边或弧两部分组成,合在一起比较困难,那就很自然地考虑到分为两个结构来分别存储。顶点因为不区分大小、主次,所以用一个一维数组来存储是狠不错的选择。图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(称为邻接矩阵)存储图中的边或弧的信息。我们可以设置两个数组,顶点数组为vertex[4]={vO,v1,V2,V3},边数组arc[4][4]为对称矩阵(0表示不存在顶点间的边,1表示顶点间存在.原创 2021-05-10 20:23:34 · 271 阅读 · 0 评论 -
数据结构与算法----图
图的定义图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。对于图的定义,我们需要明确几个注意的地方:一线性表中我们把数据元素叫元素,树中叫结点,在图中数据元素我们则称之为顶点(Vertex)。一线性表可以没有数据元素,称为空表,树中可以没有结点,叫做空树,而图结构在咱国内大部分的教材中强调顶点集合V要有穷非空。一线性表中,相邻的数据元素之间具有线性关系,树结构中,相邻两层的结点具有层次关.原创 2021-05-10 17:09:38 · 854 阅读 · 0 评论 -
数据结构与算法---二叉树2
一、二叉树的遍历二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。二叉树的遍历次序不同于线性结构,线性结构最多也就是分为顺序、循环、双向等简单的遍历方式。树的结点之间不存在唯一的前驱和后继这样的关系,在访问一个结点后,下一个被访问的结点面临着不同的选择。这就像我们的人生,漫漫长途上一步踏错满盘皆输!二叉树的遍历方法二叉树的遍历方式可以很多,如果我们限制了从左到右的习惯方式,那么主要就分为一原创 2021-05-10 16:17:55 · 618 阅读 · 0 评论 -
数据结构与算法---二叉树
一、定义二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。这个定义显然是递归形式的,所以咱看上去有点晕,因为自古有“神使用递归,人使用迭代!二叉树特点每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。(注意:不是都需要两棵子树,而是最多可以是两棵,没有子树或者有一棵子树也都是可以的。)左子树和右子树是有顺序的,次序不能颠倒。即使树中某结点只有一棵子树.原创 2021-05-10 13:12:48 · 330 阅读 · 0 评论 -
数据结构与算法--树
KMP算法是三位老前辈(D.E.Knuth、J.H.Morris 和V.R.Pratt)的研究结果,大大的避免重复遍历的情况,全称叫做克努特-莫里斯-普拉特算法,简称KMP算法。原创 2021-05-10 10:24:19 · 195 阅读 · 1 评论 -
数据结构与算法---栈和队列
一、栈官方定义:栈(Stack)是一个后进先出(Lastin first out, LIFO)的线性表,它要求只在表尾进行删除和插入操作。所谓的栈,其实也就是一个特殊的线性表(顺序表、链表),但是它在操作上有一些特殊的要求和限制:一栈的元素必须“后进先出”。一栈的操作只能在这个线性表的表尾进行。一注:对于栈来说,这个表尾称为栈的栈顶(top)相应的表头称为栈底(bottom)。栈的插入操作(Push) ,叫做进栈,也称为压栈,入栈。类似子弹放入弹夹的动作。栈的删除操作(Pop) , 叫做出原创 2021-05-02 10:39:41 · 155 阅读 · 0 评论 -
数据结构与算法--线性表
一、定义线性表(List):由零个或多个数据元素组成的有限序列。这里需要强调几个关键的地方:一首先它是一个序列,也就是说元素之间是有个先来后到的。一若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。一另外,线性表强调是有限的,事实上无论计算析发展到多强大,它所处理的元素都是有限的。所以线性表元素的个数n(n>=0)定义为线性表的长度,当n=0时,称为空表。数据类型: 是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。例如:..原创 2021-04-30 20:38:48 · 239 阅读 · 0 评论 -
数据结构与算法--时空复杂度
一、算法效率的度量方法事后统计方法:这种方法主要是通过设计好的测试程序和数据,利用计算机计时器对不同算法编制的程序的运行时间进行比较,从而确定算法效率的高低。但这种方法显然是有很大缺陷的:一必须依据算法事先编制好测试程序,通常需要花费大量时间和精力,完了发觉测试的是糟糕的算法,岂不是很亏一不同测试环境差别不是一般的大!事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。经过总结,我们发现一个高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:-1.算法采用的策略,原创 2021-04-29 17:15:04 · 196 阅读 · 0 评论 -
数据结构与算法--绪论
一、数据结构什么是数据结构? 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 一程序设计=数据结构+算法 数据结构就是关系,就是数据元素相互之间存在的一种或多种特定关系的集合 传统上,我们把数据结构分为逻辑结构和物理结构。 逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。 物理结构:是指数据的逻辑结构在计算机中的存储形式。四大逻辑结构物理结构根据物理结构的...原创 2021-04-29 15:55:11 · 119 阅读 · 0 评论