摘要:
基本概念 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前。满足此条件的顶点序列称为一个拓扑序,那么拓扑排序就是获得一个拓扑序的过程。另外,如果有合理的拓扑序,则必定是有向无环图。 拓扑排序算法 下面介绍一个比较好的拓扑排序算法 伪代码如下: void TopSort(){ for(图中每 阅读全文
摘要:
二叉搜索树是为了解决动态查找问题而提出来的,也叫做二叉排序树或二叉查找树。 基本概念 二叉搜索树(BST, Binary Search Tree):一棵二叉树,可以为空;如果不为空,则要满足以下性质: 非空左子树的所有键值小于其根结点的键值 非空右子树的所有键值大于其根结点的键值 左、右子树都是二叉 阅读全文
摘要:
基本概念 最小生成树 是一棵树 无回路,向生成树中任加一条边都一定构成回路 |V|个顶点一定有|V|-1条边 是生成树 包含全部顶点 |V|-1条边都在图里 边的权重最小 贪心算法 对于如何最小生成树的算法,我们使用贪心算法。 什么是“贪”:每一步都要好的 什么是“好”:权重最小的边 需要约束 只能 阅读全文
摘要:
最短路径问题的抽象 在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。 这条路径就是两点之间的最短路径 第一个顶点为源点 最后一个顶点为终点 问题分类 单源最短路径问题:从某固定源点出发,求其到所有其他顶点的最短路径。 (有向)无权图 (有向)有权图 多源最短路径问题:求任意两 阅读全文
摘要:
基本概念 图表示多对多的关系。包含 一组顶点:通常用V(Vertex)表示顶点集合 一组边:通常用E(Edge)表示边的集合 边是顶点对:(v,w)是集合E的元素,其中v,w是集合V的元素 有向边<v,w>表示从v指向w的边(单行线) 不考虑重边和自回路 抽象数据类型定义 类型名称:图 数据对象集: 阅读全文
摘要:
基本概念 void X_Sort(ElementType A[], int N) N是正整数 只讨论基于比较的排序(<、=、>有定义) 只讨论内部排序 稳定性:任意两个相等的数据,排序前后的相对位置不发生变化 没有一种排序是任何情况下都表现最好的 简单排序 冒泡排序 每一趟冒泡可以确定至少一个元素的 阅读全文
摘要:
基本概念 堆是一种用数组来实现的完全二叉树。堆分为两种:最大堆(大顶堆)和最小堆(小顶堆),差别在于结点的排序方式。在最大堆中,任一结点的关键字是其子树所有结点的最大值,而在最小堆中,任一结点的关键字是其子树所有节点的最小值。 在此我们暂时只讨论最大堆,也叫做优先队列。 抽象数据类型描述 类型名称: 阅读全文
摘要:
线性表是最基本的数据结构。 基本概念 线性表(Linear List):由同类型数据元素构成有序序列的线性结构。 表中元素个数称为线性表的长度 线性表没有元素时称为空表 表起始位置为表头,表结束位置为表尾 抽象数据类型描述 类型名称:线性表 数据对象集:线性表是n个元素构成的有序序列(a1,a2,· 阅读全文
摘要:
对于一般的二叉搜索树,搜索树结点不同插入次序,将导致不同的深度和平均查找长度ASL。甚至在极端的情况下,二叉搜索树会退化称线性的链表,导致插入和查找的复杂度下降到O(n),所以便提出了平衡二叉树的概念。 基本概念 平衡因子(Balance Factor, BF):BF(T)=hL-hR,其中hL、h 阅读全文
摘要:
基本概念 二叉树:一个有穷的结点的集合,这个集合可以为空,若不为空,则它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成。 有几种特殊的二叉树,分别是斜二叉树、完全二叉树和满二叉树。 二叉树的几个重要性质: 一个二叉树第i层的最大结点数为:2^(i-1),i>=1 深度为k的二叉树有最大结点 阅读全文
摘要:
队列是一种基本的数据结构 基本概念 队列(Queue):具有一定操作约束的线性表 只能在一端插入,而在另一端删除 数据插入:入队列(AddQ) 数据删除:出队列(DeleteQ) 先进先出:First In First Out(FIFO) 抽象数据类型描述 类型名称:队列 数据对象集:一个有0个或多 阅读全文
摘要:
栈是一种基本的数据结构 基本概念 栈(Stack):具有一定操作约束的线性表。 只在一端(栈顶,Top)做插入、删除操作 插入数据:入栈(Push) 删除数据:出栈(Pop) 后入先出:Last In First Out(LIFO) 抽象数据类型描述 类型名称:栈 数据对象集:一个有0个或多个元素的 阅读全文
摘要:
关于const关键字,有几个注意点。 阅读全文