随笔分类 - 数据结构与算法
摘要:一、平衡二叉树的定义 平衡二叉树(Self-Balancing Binary Search Tree或Height-Balanced Binary Search Tree),是一种二叉排序树,其中每一个结点的左子树和右子树的高度差至多等于1。平衡二叉树是一种高度平衡的二叉排序树,即要么是一棵空树,要
阅读全文
摘要:一、二叉排序树的定义 在静态查找的几种方法中,二分查找具有最高的查找效率,但是由于二分查找要求表中记录按关键字有序,且不能用链表做存储结构,因此,当表的插入、删除操作非常频繁时,为维护表的有序性,需要移动表中很多记录。这种由移动记录引起的额外时间开销,就会抵消二分查找的有限。而二叉排序树不仅具有二分
阅读全文
摘要:静态查找表有5种查找方法:顺序查找、二分查找、插值查找、斐波那契查找、线性索引查找 一、顺序查找 1.顺序查找的定义 顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键
阅读全文
摘要:一、查找的基本概念 1.查找(Searching):就是在由一组记录组成的集合中寻找关键字值等于给定值的某个记录,或是寻找属性值符合特定条件的某些记录。若表中存在这样一个记录,则称查找是成功的,此时查找的结果给出整个记录的信息,或指示该记录在查找表中的位置。若表中不存在关键字等于给定值的记录,则称查
阅读全文
摘要:一、关键路径的定义 拓扑排序主要为了解决一个工程能否顺序进行的问题,但有时候还需要解决工程完成需要的最短时间问题。 1.AOE网:在一个表示工程的带权有向图中,用顶点表示时间,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,称为AOE网(Activity On Edge
阅读全文
摘要:一、拓扑排序的定义 1.AOV网:在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,称为AOV网(Activity On Vertex Network)。 2.拓扑序列:设G={V,E}是一个具有n个顶点的有向图,V中的顶点序列v1,v2,...,
阅读全文
摘要:一、最短路径的定义 在网图和非网图中,最短路径的含义是不同的。由于非网图没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径;而对于网图来说,最短路径是指两顶点之间经过的边上权值之和最少的路径,并且称路径上的第一个顶点是源点,第二个顶点是终点。显然,非网图可以理解为所有的边的权值
阅读全文
摘要:一、最小生成树的定义 一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边。 在一个网的所有生成树中,权值总和最小的生成树称为最小代价生成树(Minimum Cost Spanning Tree),简称为最小生成树。 构造最小生成树的准则有以下3条: 只能使
阅读全文
摘要:图的遍历和树的遍历类似。图的遍历是指从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程。通常有两种遍历次序方案:深度优先遍历和广度优先遍历。 一、深度优先遍历 深度优先遍历(Depth_First_Search),也称为深度优先搜索,简称为DFS。深度优先遍历类似于树的前序遍历。 DFS算
阅读全文
摘要:一、图的邻接表结构Java语言代码实现: 图的四种类型枚举类: 图的邻接表存储结构的顶点结点类: 图的邻接表存储结构的边(或弧)结点类: 图的邻接表存储结构接口类: 图的邻接表存储结构实现类: 以下面的例子为例: 输出: 二、图的邻接表结构C语言代码实现: #include "stdio.h" #i
阅读全文
摘要:一、邻接矩阵的Java语言代码实现: 以有向网为例,无向网中矩阵对称,而有向图和无向图原理类似,只是把正无穷换成0,有连接的地方为1即可: 类的四种类型枚举类 接口类 实现类: 输出: 二、邻接矩阵的创建C语言代码实现: #include "stdio.h" #include "stdlib.h"
阅读全文
摘要:由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。 多重链表的方式,即以一个数据域和多个指针域组成的结点表示图中的一个结点,尽管可以实现图结构,但是如果各个顶点的度数相差很大,按度数最大的顶点
阅读全文
摘要:一、图的定义 线性表中的数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后继。 树形结构中的数据元素之间有明显的层次关系,并且每一层上的数据元素可能和下一层中多个元素相关,但只能和上一层中一个元素相关。 图是一种较线性表和树更加复杂的数据结构,图形结构中结点之间的关系可
阅读全文
摘要:Huffman树是一种在编码技术方面得到广泛应用的二叉树,它也是一种最优二叉树。 一、霍夫曼树的基本概念 1.结点的路径和结点的路径长度:结点间的路径是指从一个结点到另一个结点所经历的结点和分支序列。结点的路径长度是指从根结点到该结点间的路径上的分支数目。 2.结点的权和结点的带权路径长度:结点的权
阅读全文
摘要:一、树、森林与二叉树转换的意义 二叉树由于每个结点最多只能有左孩子和右孩子,而在树中一个结点可以包括任意数目的子结点,因此二叉树的很多性质和算法被研究了出来。如果所有的树都向二叉树一样方便就好了。树与二叉树、森林与二叉树之间可以相互转换,而且这种转换是一一对应的。 二、树转换为二叉树 为了操作方便,
阅读全文
摘要:一、线索二叉树的原理 1.对于一个有n个结点的二叉链表,每个结点有指向左右孩子的两个指针域,所以一共是2n个指针域。而n个结点的二叉树一共有n-1条分支线数(除了根结点,其他每个结点都有一条分支线指向自己),也就是说,其实是存在2n - (n - 1) = n + 1个空指针域。 2.在二叉链表上,
阅读全文
摘要:一、二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,称这样的链表叫做二叉链表。 二、结点结构包括:lchild左孩子指针域、data数据域和rchild右孩子指针域。 三、二叉链表的C语言代码实现: 四、二叉链表的Java语言代码实现: 二叉链表结点类: 二叉链表接口类: 二叉链表
阅读全文
摘要:一、顺序存储结构对数这种一对多的关系结构实现起来是比较困难的。但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现。 二、二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子的关系,左右兄弟的关系等。
阅读全文
摘要:一、二叉树遍历算法的应用 1.二叉树的查找:在以T为根结点的二叉树中查找值为x的结点,若找到,则返回该结点;否则,返回空值。 (1)主要思想:可在二叉树的先序遍历过程中进行,并且在遍历时将访问根结点的操作视为是将根结点的值与x进行比较的操作。 复习一下二叉树的先序递归遍历的实现为: (2)主要操作步
阅读全文
摘要:一、之前给出的二叉树遍历算法都采用的是递归算法。递归算法虽然结构简洁,但在时空开销上相对较大,从而导致运行效率较低,并且有有些程序设计环境不支持递归,这就要求将递归算法转换成非递归算法。 二、将递归算法转换为非递归算法有两种方式:一种是直接转换法,不需要回溯;另一种是间接转换法,需要回溯。直接转换法
阅读全文

浙公网安备 33010602011771号