数据结构期末复习(下)

第七章 树

树性质 3种存储结构 填空3

二叉树 完全二叉树 特点 填空4

二叉树转换区别 例 简答4

二叉树存储结构 顺序和链式 填空5

先中后遍历递归算法 例7.11 7.12 7.13 填空6

层次遍历的图 深度广度 简答5

二叉树构造 给出 2序列 构造出二叉树,写最后1种 简答6

给1个二叉树画出某个序列线索二叉树p228 简答7

哈夫曼树原理 图 简答8

如果出现俩个1一样的树怎么办p232例题     

Wpl值                                                                       

 

树的性质:

树中的结点数等于所有结点的度数之和加1

度为m的树中第i层上最多有m的i-1次个结点

 

三种存储结构:双亲存储结构,孩子链存储结构,孩子兄弟链存储结构

二叉树(binary tree)是一个有限的结点集合,这个集合或者为空,或者由一个根结点和两棵互不相交的称为左子树(left subtree)和右子树(right subtree)的二叉树组成。

二叉树和度为2的树(2次树)是不同的,对于非空树,其差别表现在以下两点:

(1)度为2的树中至少有一个结点的度为2,而二叉树没有这种要求

(2)度为2的树不区分左、右子树,而二叉树是严格区分左、右子树的

,满二叉树是完全二叉树的一种特例,并且完全二叉树与同高度的满二叉树的

对应位置结点的编号相同。图7.5(b)所示的完全二叉树与等高度的满二叉树相比在最后一层的右边缺少了4个结点

 

非空完全二叉树的特点如下:

(1)叶子结点只可能在最下面两层中出现

(2)对于最大层次中的叶子结点,都依次排列在该层最左边的位置上

(3)如果有度为1的结点,只可能有一个.且该结点只有左孩子而无右孩子,

(4)在按层序编号时,一旦出现编号为的结点是叶子结点或只有左孩子,则编号大于

i的结点均为叶子结点。

(5)当结点总数n为奇数时,=0,当结点总数n为偶数时,=1。

二叉树的性质:

性质1:非空二叉树上的叶子结点数等于双分支结点数加1

 

二叉树与树,森林之间的转换

将一棵树转换成二叉树的过程如下:

(1)树中所有相邻兄弟之间加一条连线

(2)对树中的每个结点只保留它与长子(即最左边的孩子结点)之间的连线,删除与其他孩子之间的连线

(3)以树的根结点为轴心,将整棵树顺时针转动45°,使之结构层次分明

 

若要转换为二叉树的森林由两棵或两棵以上的树构成,将这样的森林转换为二叉树的过程如下:

(1)将森林中的每棵树转换成相应的二叉树

(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,当所有二叉树连在一起后,此时得到的二叉树就是由森林转换得到的二叉树

 

若一棵二叉树是由一棵树转换而来的,则该二叉树还原为树的过程如下:

(1)若某结点是其双亲的左孩子,则把该结点的右孩子、右孩子的右孩子等都与该结点的双亲结点用连线连起来。

(2)删除原二叉树中所有双亲结点与右孩子结点之间的连线

(3)整理由前面两步得到的树,即以根结点为轴心,逆时针转动45°,使之结构层次分明

 

若一棵二叉树是由m棵树构成的森林转换而来的,该二叉树的根结点一定有m-1个右下孩子,该二叉树还原为森林的过程如下:

(1)抹掉二叉树根结点右链上的所有结点之间的“双亲一右孩子”关系,将其分成若干个以右链上的结点为根结点的二叉树,设这些二叉树为bt、bt 2、·.bt m

(2)分别将二叉树bt、bt、·、bt各自还原成一棵树。

 

二叉树的顺序存储结构和链式存储结构

先中后遍历递归算法

层次遍历dfs bfs

构造二叉树

 

 

画线索二叉树

 

哈夫曼树原理

在n。个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树称为哈夫曼树(Huffman tree)或最优二叉树。

构造哈夫曼树

 

WPL值的计算

 

 

第八章 图

无论多么复杂的图都是由顶点和边构成的。采用形式化的定义,图G(graph)由两个集合V(vertex)和E(edge)组成,记为G=(V,E).其中V是顶点的有限集合,记为V(G),E是连接V中两个不同顶点(顶点对)的边的有限集合,记为E(G)

一个图中所有顶点的度之和等于边数的两倍

常用的图的储存结构有邻接矩阵和邻接表(邻接矩阵存储稠密图,可以利用对称矩阵压缩存储,邻接表顺序和链式存储相结合的存储方法)

十字链表法(有向图),邻接多重表法(无向图)

图的遍历

BFS(广度优先遍历)

DFS (深度优先遍历)

给一个邻接表,写深广度树 简答9

Dijkstra (迪杰斯特拉)算法

Floyd (弗洛伊德)算法

生成树 (普里姆,克鲁斯卡尔) 填空8

生成树是一个极小连通子图,不能使用产生回路的边

在图的所有生成树中,边上的权值之和最小的树为图的最小生成树

Prim算法 每次顶点集选最小的边加入顶点集,直到全部加入

Kruskal算法 每次选择非连通的两条边

 

第九章 查找

查找概念 填空9

二叉排序树 

平衡二叉树 例9.5大

哈希表概念

哈希函数 哈希冲突

被查找对象是由一组元素(或记录)组成的表或文件,称为查找表。查找表中的每个元素由若干个数据项组成,其中指定一个数据项为关键字(key),所有元素的关键字是唯一的在这种条件下,查找(search)的定义是给定一个值k,在含有n个元素的表中找出关键字等于k的元素。若找到,则查找成功,返回该元素的信息或该元素在表中的位置;否则查找失败,返回相关的指示信息。

顺序查找,折半查找,分块查找(索引顺序查找)

二叉排序树(binary search tree,BST)又称二叉搜索树,其定义为二叉排序树或者是空树,或者是满足以下性质的二叉树

(1)若根结点的左子树非空,则左子树上的所有结点关键字均小于根结点关键字。

(2)若根结点的右子树非空,则右子树上的所有结点关键字均大于根结点关键字。

(3)根结点的左、右子树本身又各是一棵二叉排序树。

上述性质简称二叉排序树性质(BST性质).故二叉排序树实际上是满足BST性质的二叉树。也就是说,二叉排序树是在二叉树的基础上增加了结点值的约束。

由BST性质可知,二叉排序树中的任一结点,其左子树中的任一结点y(若存在)的关键字必小于的关键字,其右子树中的任一结点(若存在)的关键字必大于的关键字。

由关键字序列构建平衡二叉树的过程

Ll. Dr. Lr rl

哈希表(Hash table)又称散列表,其基本思路是,设要存储的元素个数为n,设置一个长度为m(m≥n)的连续内存单元,以每个元素的关键字k.(0≤-1)为自变量,通过一个称为哈希函数(Hash function)的函数h(k)把k:映射为内存单元的地址(或下标)h(k:)

并把该元素存储在这个内存单元中,h(k,)也称为哈希地址(Hash address)。把如此构造的

线性表存储结构称为哈希表

在构建哈希表时可能存在这样的问题,两个关键字k和k(ij有,但会出现h(k)=h(k)的情况,把这种现象叫哈希冲突(Hash collisions)。通常把这种具有不同关键字而具有相同哈希地址的元素称为同义词(synonym),这种冲突也称为同义词冲突。在哈希表存储结构中,同义词冲突是很难避免的,除非关键字的变化区间小于或等于哈希地址常关键字的取值区间远大于哈希地址的变化区间

开放地址法,拉链法

第十章

排序概念

所谓排序(sort),就是要整理初始排序表中的元素,使之按关键字递增或递减有序排

内排序方法可以分为需要关键字比较和不需要关键字比较两类

需要关键字比较的排序方法有插入排序、选择排序、交换排序和归并排序等:

不需要关键字比较的排序方法有基数排序等

 

不同排序方法特点                                        

插入排序

插人排序的基本思想是每次将一个待排序的元素按其关键字大小插入前面已经排好序的子表中的适当位置,直到全部元素插人完成为止。直接插入排序,折半插入排序,希尔排序

 

交换排序

交换排序的基本思想是两两比较待排序元素的关键字,发现这两个元素的次序相反时即进行交换,直到没有反序的元素为止。本节介绍两种交换排序,即冒泡排序和快速排序。

 

选择排序

选择排序的基本思想是每一趟从待排序的元素中选出关键字最小的元素,顺序放在已排好序的子表的最后,直到全部元素排序完毕。由于选择排序方法每一趟总是从无序区中选出全局最小(或最大)的关键字,所以适合于从大量的元素中选择一部分排序元素.例如从10000个元素中选择出关键字最小的前10个元素就适合采用选择排序方法,本节介绍两种选择排序方法,即简单选择排序(或称直接选择排序)和堆排序。

 

归并排序

排序思路:归并排序(merge sort)是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表,即二路归并

二路归并排序(2-way merge sort)的基本思路是将R[0..n—1]看成n个长度为1的有序序列,然后进行两两归并,得到[n/2]个长度为2(最后一个有序序列的长度可能为2)的有序序列,再进行两两归并,得到[n/4]个长度为4(最后一个有序序列的长度可能小于4)的有序序列,,直到得到一个长度为n的有序序列。

说明:归并排序中每趟产生的有序区只是局部有序的,也就是说在最后一趟排序结束前所有元素并不一定归位了。

 

基数排序

排序思路:前面所讨论的排序算法均是基于关键字之间的比较来实现的,而基数排序(radix sort)是通过“分配”和“收集”过程来实现排序,不需要进行关键字间的比较,是一种借助于多关键字排序的思想对单关键字排序的方法。

平方阶排序:直接插入,折半插入,简单选择,冒泡

Nlogn 快速排序,堆排序,二路归并排序

 

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值