经典排序算法——快速排序1 快速排序的思想快速排序的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另—部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。2 快速排序的实现/* 交换顺序表L中子表的记录,使枢轴记录到位,并返回其所在位置 *//* 此时在它之前(后)的记录均不大(小)于它。 */int Partition(SqList
经典排序算法——冒泡排序1 冒泡排序的实现冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,指导没有反序的记录为止。冒泡排序算法:,void BubbliSort(SqList *L){ int i,j; Status flag= TRUE; for (i=1;i<L->length && flag;i++){ //
1 广义表的作用数组可以存储不可再分的数据元素(如元素1,字符‘a’),也可以存储数组。但在数组中,两种不同类型的存储元素不能出现在同一个数组中。例如在数组中,可以存储{1,2,3},也可以创建二维数组{1,{1,2,3}},但数组不适合存储类似多维数组的元素,会极大的造成存储空间的浪费。对于存储多维数组可以使用广义表结构来存储。广义表,又称为列表,是一种线性存储结构。同数组类似,既可以存储不可再
1 散列表查找定义散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系,使得每个关键字key对应一个存储位置。存储位置=f(关键字)对应关系称为散列函数,又称为哈希(Hash)函数。采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表。散列技术既是一种存储方法,也是一种查找方法。散列函数可能会把两个或两个以上的不同关键字映射到同一地址,称这些情况为冲突,这些
1 二叉排序树的定义果查找的数据集是有序线性表,并且是顺序存储的,查找可以用折半查找算法来实现,因为有序,在插入和删除操作上,就需要耗费大量的时间。假设现在我们的数据只有一个数{62,88,58,47,35,73,51,99,37,93}做查找,建立好的二叉排序树如图所示,62、88、58创建好后,下一个数47因比58小,是它的左子树,35是47的左子树,73比62大,但比88小,是88的左子树,
1有序查找查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素。查找表按照操作方式分成两大种:1.静态查找表(StaticSearchTable):只作查找操作的查找表查询某个“特定的”数据元素是否在查找表中。检索某个“特定的”数据元素和各种属性。2.动态查找(DynamicSearchTable):在查找过程中同时插入查找表中不存在的数据元素,或者从查找表中删除已经存在的某个
拓扑排序在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的有限关系,这样的有向图为顶点表示活动的网,我们成为AOV网(Activity On Vertex Network)。AOV网中的弧表示活动之间存在的某种制约关系,且不能存在回路。设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列,满足若从顶点到有一条路径,则在顶点序列中顶点必在顶点之前,则我们称这样的顶点序列为一个拓扑序列
关键路径如果要对一个流程图获得最短时间,就必须要分析它们的拓扑关系,并找到当中最关键的流程,这个流程的时间就是最短时间。在一个表示工程的带权有向图中,用顶点表示时间,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,我们称之为AOE网(Activity On Edge Network)。把AOE网中没有入边的顶点称之始点或源点,没有出边的顶点称为源点或汇点。由于一个工程
1 最小生成树构造连通网的最小代价生成树称为最小生成树(Mininum Cost Spanning Tree)。找连通网的最小生成树,经典的有两种算法,普里姆算法和克鲁斯卡尔算法。1.1 普里姆(Prim)算法我们先构造邻接矩阵,如图所示:从开始,旁有两条边, 10与11比, 10更小一些些。所以选至的边为最小生成树的第—条边,如左下图所示。然后我们看和两个顶点的其他边,有11、16、12、18,
图的遍历算法的实现——深度优先遍历与广度优先遍历
图的存储结构
图的定义及相关术语
1 哈夫曼树的定义与原理 在如今素质教育的实际学习生活中,学生的成绩在5个等级上的分布规律如下: 采用传统方法判断学生学习等级如图所示: 那么70分以上大约占总数80%的成绩都需要经过3次以上的判断才可以得到结果,这显然对算力具有很大的浪费。我们对这棵二叉树重新进行分配,改成如图所示的二叉树。 我们把这棵二叉树简化成叶子结点带权的二叉树(树结点间的边
二叉树的建立及线索二叉树
1 二叉树的定义二叉树(Binary Tree)是个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成,如下图所示。1.1 二叉树的特点二叉树的特点有:每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点,没有一棵子树或者由一棵子树都是可以的。左子树和右子树是有顺序的,次序不能颠倒。即使树中某结点只有一棵子树,也要区分
1 树的定义树(Tree)是个结点的有限集。时称为空树。在时称为空树。在任意一棵非空树种:①有且仅有一个特定的称为根(Root)的结点;②当n>1时,其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树(SubTree),如图所示。对于树的定义还需要注意两点:时根节点是唯一的,不可能存在多根结点,别和现实中的大树混在一起,现实中的树有很多根须,那
1 KMP模式匹配算法原理假设主串S=“abcdefab”,我们要匹配的子串T=”abcdex“,如果用朴素模式匹配算法,前5个字母,两个串完全相等,直到第6个字母,”f“与“x”不等,如图所示。接下来按照朴素模式匹配算法,应该是按照上图的步骤2、3、4、5、6,即主串S中当时,首字符与子串T的首字符均不等。仔细观察就会发现,对于要匹配的子串T来说,“abcdex”首字母“a”与后面串“bcdex
串的定义及朴素的模式匹配算法
1 队列的定义1.1 文字定义队列:只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(First In First Out)的线性表,简称FIFO结构。允许插入的一端称为队尾,允许删除的一端称为队头。1.2 代码定义伪代码定义:ADT 队列(Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继的关系。 Operation Init
栈及栈的应用——后缀表达式
1 静态链表1.1 静态链表的定义及初始化静态链表:用数组代替指针来描述单链表,也可以叫做游标实现法。数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)来访问。#define MAXSIZE 1000typedef struct{ ElemType data; int cur; // 游标(curso
1链表存在的意义 线性表的顺序存储结构最大的缺点就是插入和删除时需要移动大量元素,这显然是需要耗费大量的时间,链式存储结构就是为了解决这个问题而存在。为什么当插入和删除时,就要移动大量元素。仔细分析后,发现原因就在于响铃元素的存储位置具有邻居关系。它们编号是1,2,3,·····,n,它们在内容中的位置也是挨着的,中间没有空隙,当然就无法快速插入,而删除后,当中就会留出空隙,问题就出在这
1 线性表的定义线性表(List):零个或多个数据元素的有限序列。线性表是一个序列。元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。线性表强调是有限的,在计算机中处理的对象都是有限的,那种无限的数列,只存在于数学的概念中。在较复杂的线性表中,一个数据元素可以由若干个数据项组成。2 线性表的抽象数据类型线性表的抽象数据类型定义伪代码如
数据结构02算法1 数据结构与算法的关系数据结构与算法的关系就相当于梁山伯和祝英台、罗密欧和朱丽叶的关系。只谈数据结构,当然是可以,但是只学数据结构,学完后,很可能不知道数据结构有什么用处,但是在学习数据结构的同时一起学习算法,就会发现,甚至开始感慨:计算机界的前辈们,的确是—些很牛很牛的人,他们使得很多看似很难解决或者没法解决的问题,处理得如此美妙和神奇。2 算法的定义算法是解决特定问题求解步骤
数据结构01绪论基本概念数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。在计算机中,数据元素并不是孤立、杂乱无序的,而是具有内在联系的数据集合。 数据元素之间存在的一种或多种特定关系,也就是数据的组织形式。数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号