02 2022 档案
摘要:5.7哈夫曼树及其应用 5.7.1哈夫曼树的基本概念 哈夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树,在实际中有广泛的用途。哈夫曼树的定义,涉及路径、路径长度、权等概念,下面先给出这些概念的定义,然后再介绍哈夫曼树。 路径:从一个结点到另一个结点之间的分支序列 路径长度:从一个
阅读全文
摘要:5.6.2森林与二叉树的转换 1.森林转换成二叉树 如果F={T1,T2,…,Tm}是森林,则可按如下规则转换成一棵二叉树B= (root, LB, RB)。 (1)若F为空,即m= 0,则B为空树; (2)若F非空,即m"'F-0, 则B的根root即为森林中第一棵树的根ROOT(T,1 ); B
阅读全文
摘要:5.5.2线索二叉树 1.线索二叉树的基本概念 在二叉树线索化的过程中会把树中的空指针利用起来作为寻找当前结点前驱或后继的线索,这样就出现了一个问题,即线索和树中原有指向孩子结点的指针无法区分。 ltag和rtag就是为了区分这两类指针,它们为标志域, 具体意义如下: 若ltag=0,则表示lchi
阅读全文
摘要:5.4 二叉树的性质和存储结构 5.4.1二叉树的性质 性质1:第i层上至多有2^{i-1}个结点(i从1开始增加) 性质2:深度为 l 的二叉树至多有2^{l}-1个结点 二叉树的深度为l,每一层上的结点数目为2^{i-1},由等比数列的求和公式可以得出结果: 性质3:对于任何一棵二叉树,若叶
阅读全文
摘要:5.1树和二叉树的定义 5.1.1树的定义 n(n≥0)个结点的有限集合。 当n=0时,称为空树; 任意一棵非空树满足以下条件: ⑴ 有且仅有一个特定的称为根的结点; ⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这
阅读全文
摘要:4.6案例分析和实现 案例4.1病毒感染检验 1.案例分析 因为患者的 DNA 和病毒 DNA 均是由一些字母组成的字符串序列, 要检测某种病毒 DNA 序列是否在患者的 DNA 序列中出现过 , 实际上就是字符串的模式匹配问题。可以利用 BF 算法,也可以利用更高效的KMP算法。但与一般的模式匹配
阅读全文
摘要:4.4数组 4.4.1数组的类型定义 1.数组的定义 n维数组中含有 ∏ i = 1 n b i \prod _ {i = 1} ^ n b_i ∏i=1nbi个数据元素,每个数据元素都受着n个关系的约束 在每个关系中,元素 a j 1 j 2 ⋯ j n ( 0 ≤ j i ≤ b i − 2 )
阅读全文
摘要:4.3.3串的模式匹配算法 子串的定位运算通常称为串的模式匹配或串匹配。 串的模式匹配设有两个字符串S和T,设S为主串,也称为正文串;设T为子串,也称为模式。 在主串S中查找与模式T相匹配的子串,如果匹配成功,确定相匹配的子串中的第一个字符在主串S中出现的位置。 1.BF算法 模式匹配不一定是从
阅读全文
摘要:4.1串的定义 串(String)是由零个或者多个字符组成的有限序列,又名叫字符串。 一般记为s=“a1a2……an”(n>=0) 其中s是串的名称,用双引号括起来括起来的字符序列是串的值,引号不属于串的内容。ai(1=< i ⇐i)可以是字母,数字或者其他字符,i就是该字符在串中的位置。串中的字符
阅读全文
摘要:3.6案例分析和实现 案例3.1:数制的转换 1.案例分析 当将一个十进制整数N转换为八进制数时,在计算过程中,把N与8求余得到的八进制数的各位依次进栈,计算完毕后将栈中的八进制数依次出栈输出,输出结果就是待求得的八进制数 2.算法步骤 1、初始化一个空栈S。 2、当十进制数N非零时,循环执行以下操
阅读全文
摘要:3.5.3 链队-队列的链式表示和实现 链队是指采用链式存储结构实现的队列。通常链队用单链表来表示,如图所示。一个链队显然需要两个分别指示队头和队尾的指 针(分别称为头指针和尾指针)才能唯一确定。这里和线性表的单链表一样,为了操作方便起见,给链队添加一个头结点,并令头指针始终指向头结点。 1.队列的
阅读全文
摘要:3.5.队列的表示和操作的实现 3.5.1队列的类型定义 1.队列的抽象数据类型定义 ADT 队列 (Queue) Data 同线性表。元素具有相同的类型,相邻元素具有前驱和后继关系 。 Operation InitQueue(*Q) :初始化操作,建立一个空队列Q。 DestroyQueue(*Q
阅读全文
摘要:3.4栈与递归 3.4.1采用递归算法解决的问题 1.递归的定义: 若一个对象部分地包含它自己, 或用它自己给自己定义, 则称这个对象是递归的; 若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 long Fact ( long n ) { if ( n == 0) return 1;
阅读全文
摘要:3.3.3链栈的表示和实现 定义: 链栈是指采用链式存储结构实现的栈。通常链栈用单链表来表示。链栈的结构与单链表的结构相同 在此用StackNode来表示,定义如下: typedef struct StackNode { SElemType data; struct StackNode* next;
阅读全文
摘要:3.1栈和队列的定义和特点 3.1.1栈的定义和特点 1定义: 栈是限定仅在表尾进行插入或者删除操作的线性表。因此,对于栈来说,表尾端有其特殊含义,称为栈顶,相应的,表头端称为栈底。不含元素的空表称为空栈。 2.特点: 先进后出(FILO) 3.存储结构: 顺序栈和链式栈,实际上栈的本质
阅读全文
摘要:2.8案例分析和实现 1.案例2.1:一元多项式的运算 #include<bits/stdc++.h> //万能头文件,如果不是特别清楚可以百度。 using namespace std; typedef struct Node{ int coef;//系数 int exp;//指数 struct
阅读全文
摘要:2.7.1线性表的合并 算法2.15线性表的合并 算法步骤 1、分别获取LA表长m和LB表长n 2、从LB表中第一个元素开始,循环n次执行以下操作: 从LB中查找第i个数据元素赋值给e; 在LA中查找元素e,如果不存在,则将e插在表LA的最后 算法描述 //合并 void Combine(SqLis
阅读全文
摘要:2.5.3循环链表 1.定义: 将单链表中的终端结点的指针端由空指针改为指向头节点,就可以使整个链表形成一个环,这种头尾相连的链表称为单循环链表,简称循环链表。 它可以解决一个很麻烦的问题:如何从当中一个结点出发,访问到链表的全部结点 2.循环链表带有空节点的循环链表: 3.非空循环链表: 4.将两
阅读全文
摘要:2.5 线性表的链式表示和实现 2.5.1单链表的定义的表示 线性表链式存储结构的特点是:用一组任意的存储单元存储存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。因此,为了表示每个数据元素ai与其后继数据元素ai+1之间的逻辑关系,对数据元素ai来说,除了存储其本身的信息之外,还
阅读全文
摘要:第二章 线性表 2.1线性表的定义和特点 1、他们的数据元素虽然不同,但是同意线性表中的元素必定是具有相同的特性,即属于同一数据对象,相邻数据元素之间存在着序偶关系 2、对于非空的线性表或阿这线性结构,其特点: 存在唯一的一个被称作"第一个"的数据元素; 存在唯一的一个被称作“最后一个”的数据元素;
阅读全文
摘要:6.6.2最短路径 1.从某个源点到其余各顶点的最短路径 1.1迪杰斯特拉算法的求解过程 对于网 N=(V,E), 将 N中的顶点分成两组: 第一 组S: 已求出的最短路径的终点集合(初始时只包含源点Vo)。 第二组 V-S: 尚未求出的最短路径的顶点集合(初始时为 V- {vo}) 算法将按各顶点
阅读全文
摘要:6.5图的遍历 6.5.1深度优先搜索 1.深度优先搜索遍历的过程 (1)从图中某个顶点v出发, 访问v。 (2)找出刚访问过的顶点的第一个未被访问的邻接点, 访问该顶点。 以该顶点为新顶点,重复此步骤, 直至刚访问过的顶点没有未被访问的邻接点为止。 (3)返回前一个访问过的且仍有未被访问的邻接点的
阅读全文
摘要:第1章绪论 1.1数据结构和研究内容 早期,主要用于数值计算 现在越来越多的被用于非数值的计算,如 学生学籍管理系统,计算机处理的对象是各种表,元素之间存在简单一对一的线性关系,因此这类问题的数学模型就是各类线性表,施加于对象上的操作有查找、插入和删除等。这类数学模型被称为“线性”数学模型。 人机对
阅读全文
摘要:第六章 图 6.1图的定义和基本术语 6.1.1图的定义 图(Graph) G由两个集合V和E组成,记为G=(V,E) , 其中V是顶点的有穷非空集合,E是V中顶点偶对的有穷集合,这些顶点偶对称为边。V(G)和E(G)通常分别表示图G的顶点集合和边集合,E(G)可以为空集。若E(G)为空,则图G只有
阅读全文
摘要:6.4图的存储结构 6.4.1邻接矩阵 1.邻接矩阵表示法 邻接矩阵是表示顶点之间相邻关系的矩阵。 用邻接矩阵表示法表示图,除了一个用于存储邻接矩阵的二维数组外,还需要一个一维数组来存储顶点信息,形式说明如下: /*图的邻接矩阵存储表示法*/ //用两个数组分别存储顶点表和邻接矩阵 #define
阅读全文