数据结构与算法7

合集下载

《数据结构与算法》(张晓莉)习题

《数据结构与算法》(张晓莉)习题

第一章绪论1. 从逻辑上可以把数据结构分为()两大类。

A.动态结构、静态结构B.顺序结构、链式结构C.线性结构、非线性结构D.初等结构、构造型结构2. 在下面的程序段中,对x的赋值语句的频度为().For(k=1;k〈=n;k++)For(j=1;j〈=n;j++)x=x+1;A.O(2n) B.O(n)C.O(n2) D.O(log2n)3。

采用顺序存储结构表示数据时,相邻的数据元素的存储地址( ).A.一定连续B.一定不连续C.不一定连续D.部分连续、部分不连续4. 下面关于算法的说法,正确的是().A.算法的时间复杂度一般与算法的空间复杂度成正比B.解决某问题的算法可能有多种,但肯定采用相同的数据结构C.算法的可行性是指算法的指令不能有二义性D.同一个算法,实现语言的级别越高,执行效率就越低5。

在发生非法操作时,算法能够作出适当处理的特性称为().A.正确性B.健壮性C.可读性D.可移植性第二章线性表1. 线性表是()。

A.一个有限序列,可以为空B.一个有限序列,不能为空C.一个无限序列,可以为空D.一个无限序列,不能为空2.对顺序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。

插入一个元素时平均要移动表中的()个元素。

A.n/2 B.(n+1)/2 C.(n-1)/2 D.n3.线性表采用链式存储时,其地址()。

A.必须是连续的B.部分地址必须是连续的C.一定是不连续的D.连续与否均可以4.用链表表示线性表的优点是( )。

A.便于随机存取B.花费的存储空间较顺序存储少C.便于插入和删除D.数据元素的物理顺序与逻辑顺序相同5.链表中最常用的操作是在最后一个元素之后插入一个元素和删除最后一个元素,则采用( )存储方式最节省运算时间。

A.单链表B.双链表C.单循环链表D.带头结点的双向循环链表6.下面关于线性表的叙述,错误的是().A.线性表采用顺序存储,必须占用一片地址连续的单元B.线性表采用顺序存储,便于进行插入和删除操作C.线性表采用链式存储,不必占用一片地址连续的单元D.线性表采用链式存储,不便于进行插入和删除操作7.单链表中,增加一个头结点的目的是为了( ).A.使单链表至少有一个结点B.标识表结点中首结点的位置C.方便运算的实现D.说明单链表是线性表的链式存储8.在单链表指针为p的结点之后插入指针为s结点,正确的操作是()。

大学计算机基础07数据结构与算法资料PPT课件

大学计算机基础07数据结构与算法资料PPT课件
第7章 数据结构与算法
7.1 算 法 7.2 数据结构的基本概念 7.3 线性表及其顺序存储结构 7.4 栈和队列 7.5 线性链表 7.6 树与二叉树 7.7 查找与排序技术
第7章 数ST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT
例7.2 有5个人坐在一起, 问第5个人的岁数,他说比第4个人大2岁。 问第4个人的岁数,他说比第3个人大2岁。 问第3个人的岁数,他说比第2个人大2岁。 问第2个人的岁数,他说比第1个人大2岁。 问第1个人的岁数,他说是10岁。 请问第5个人多大。
27.07.2020
11
第7章 数据结构与算法
这个问题可以用递归方法解决。递归过程如下: age(5)=age(4)十2 age(4)=age(3)十2 age(3)=age(2)十2 age(2)=age(1)十2 age( l)=10
27.07.2020
14
第7章 数据结构与算法
2.算法的空间复杂度 算法的空间复杂度是指执行这个算法所需要的内存空间。 类似算法的时间复杂度,空间复杂度作为算法所需存储空 间的度量。
27.07.2020
15
第7章 数据结构与算法
7.2 数据结构的基本概念 数据结构主要研究三个问题:
(1)数据集合中各数据元素之间所固有的逻辑关 系,即数据的逻辑结构;
现实世界中存在的一切个体都可以是数据元素(简称元 素)。
例如: 春、夏、秋、冬; 26、56、65、 73、26、…; 父亲、儿子、女儿。
数据元素之间的关系可用前后件关系 例如, “春”是“夏”前件,“夏”是“春”的后件。
27.07.2020
18

数据结构与算法张铭课后答案

数据结构与算法张铭课后答案

数据结构与算法张铭课后答案【篇一:第3章栈和队列数据结构张铭复习题】一、填空题(每空1分,共15分)1. 向量、栈和队列都是栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。

2. 栈是一种特殊的线性表,允许插入和删除运算的一端称为。

不允许插入和删除运算的一端称为栈底。

3.4. 在一个循环队列中,队首指针指向队首元素的位置。

5. 在具有n个单元的循环队列中,队满时共有个元素。

6. 向栈中压入元素的操作是先,后。

7. 从循环队列中删除一个元素时,其操作是先移动队首指针,后。

8. 带表头结点的空循环双向链表的长度等于。

解:head二、判断正误(判断下列概念的正确性,并作出简要的说明。

)(每小题1分,共10分)错,线性表是逻辑结构概念,可以顺序存储或链式存储,与元素数据类型无关。

错,不一定吧?调用子程序或函数常用,cpu中也用队列。

(√)3. 栈是一种对所有插入、删除操作限于在表的一端进行的线性表,是一种后进先出型结构。

(√)4. 对于不同的使用者,一个表结构既可以是栈,也可以是队列,也可以是线性表。

正确,都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

错,栈是逻辑结构的概念,是特殊殊线性表,而链表是存储结构概念,二者不是同类项。

错,他们都是线性逻辑结构,栈和队列其实是特殊的线性表,对运算的定义略有不同而已。

(√)7. 栈和队列的存储方式既可是顺序方式,也可是链接方式。

(√)8. 两个栈共享一片连续内存空间时,为提高内存利用率,减少溢出机会,应把两个栈的栈底分别设在这片内存空间的两端。

错,有可能。

三、单项选择题(每小题1分,共20分)(b)1.栈中元素的进出原则是A.先进先出B.后进先出C.栈空则进D.栈满则出(c)2.若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为A.i B.n=iC.n-i+1 D.不确定解释:当p1=n,即n是最先出栈的,根据栈的原理,n必定是最后入栈的(事实上题目已经表明了),那么输入顺序必定是1,2,3,?,n,则出栈的序列是n,?,3,2,1。

数据结构-7顺序查找与二分查找

数据结构-7顺序查找与二分查找

i=m+1=8,j=8, m=(i+j)/2=8。 r[m]>k : 在左半部分继续查找。
i=8, j=m-1=7 ,
i>j: 查找失败
存储结构
key info 0 1 k1 2 k2 3 k3
…………
n kn
typedef struct { keytype key; ………….
} elemtype;
分块有序表的结构可以分为两部分: 1、线性表本身是顺序存储结构 2、再建立一个索引表,线性表中每个子表建立一个索引节点
。索引节点包括两部分:一是数据域,一是指针域。数据域存 放对应子表中的最大元素值,指针域用于指示子表第一个元素 的在整个表中序号。
分块查找
template<class T> struct indnode {
key=32
d (1) 27
i=1
d (2) 36
i=2
d (3) 32i=3 Nhomakorabead (4) 18
此时d(i)=key,数组中的第3个位置
如果输入查找的元素值key=22
d (1) 27 i=1
d (2) 36 i=2
d (3) 32 i=3
d (4) 18
i=4 i=5 此时i等于5,超过数组中元素个数,找不到
T key; int k; };
上图查找过程:首先查找索引表,确定查找的子表,然后再相应的子表中 应顺序表查找法查找。
• int blksearch(record r[],index idx[],keytype key)
•{
• int i=0,j;
• while(i<idxN)
•{
• if(key<=idx[i].key){

数据结构与算法 模拟试卷七、八及参考答案

数据结构与算法 模拟试卷七、八及参考答案

模拟试卷七一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其号码填在题干后的括号内。

每小题1分,共10分)1.假设执行语句S的时间为O(1),则执行下列程序段for(i=1;i<=n;i++)for(j=i;j<=n;j++)S;的时间为( )A)O(n)B)O(n2)C)O(n*i)D)O(n+i)2.设栈最大长度为3,入栈序列为1,2,3,4,5,6,则不可能的出栈序列是()。

A)1,2,3,4,5,6 B)2,1,3,4,5,6C)3,4,2,1,5,6 D)4,3,2,1,5,63.设单链表的结点结构为(data,next),已知指针q所指结点是指针p所指结点的直接前驱,如在*q与*p之间插入结点*s,则应执行的操作为()。

A)s->next=p->next; p->next=s; B)q->next=s; s->next=p;C)p->next=s-next; s->next=p; D)p->next=s; s-next=q;4.串S='ABC DEF'的串长为()。

A)3 B)4C)7 D)85.下面二叉树按()遍历得到的序列是FEDBIHGCA。

A)先序B)中序C)后序D)层次6.用Floyd算法求每一对顶点之间的最短路径的时间复杂度为()。

A)O(n) B)O(n2)C)O(n3) D)O(nlogn)7.具有n个顶点的无向图,它可能具有的边数的最大值为()。

A)(n2+n)/2 B)n2C)(n2-n)/2 D)n8.二分查找法要求被查找的表是()。

A)顺序表B)链接表C)顺序表且是按值递增或递减次序排列D)不受上述的任何限制9.在一待散列存储的线性表(18,25,63,50,42,32,90),若选用h(k)=k % 7作为散列函数,则与元素18冲突的元素有( )个。

A)0 B)1C)2 D)310.在下列排序算法中,不稳定的是()。

数据结构与算法习题及答案

数据结构与算法习题及答案

第1章绪论习题1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。

2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。

3.简述逻辑结构的四种基本关系并画出它们的关系图。

4.存储结构由哪两种基本的存储方法实现?5.选择题(1)在数据结构中,从逻辑上可以把数据结构分成()。

A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的()。

A.存储结构B.存储实现C.逻辑结构D.运算实现(3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着()。

A.数据具有同一特点B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致C.每个数据元素都一样D.数据元素所包含的数据项的个数要相等(4)以下说法正确的是()。

A.数据元素是数据的最小单位B.数据项是数据的基本单位C.数据结构是带有结构的各数据项的集合D.一些表面上很不相同的数据可以有相同的逻辑结构(5)以下与数据的存储结构无关的术语是()。

A.顺序队列 B. 链表 C.有序表 D. 链栈(6)以下数据结构中,()是非线性数据结构A.树B.字符串C.队D.栈6.试分析下面各程序段的时间复杂度。

(1)x=90; y=100;while(y>0)if(x>100){x=x-10;y--;}else x++;(2)for (i=0; i<n; i++)for (j=0; j<m; j++)a[i][j]=0;(3)s=0;for i=0; i<n; i++)for(j=0; j<n; j++)s+=B[i][j];sum=s;(4)i=1;while(i<=n)i=i*3;(5)x=0;for(i=1; i<n; i++)for (j=1; j<=n-i; j++)x++;(6)x=n; //n>1y=0;while(x≥(y+1)* (y+1))y++;(1)O(1)(2)O(m*n)(3)O(n2)(4)O(log3n)(5)因为x++共执行了n-1+n-2+……+1= n(n-1)/2,所以执行时间为O(n2)(6)O(n)第2章线性表1.选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()。

数据结构与算法试卷及答案7

广州大学学年第学期考试卷课程数据结构与算法考试形式(闭卷,考试)信息学院系专业级班学号:姓名:一、填空题:(每格2分,共20分)1.已知二叉树的中序遍历序列为B,H,D,C,E,F,A,G,后遍历序列为H,D,F,E,C,B,G,A,其前序遍历列为。

2.若一个非连通的无向图最多有21条边,则该无向图至少有个顶点。

3.若具有n个顶点的无向连通图采用邻接矩阵表示,则邻接矩阵中至少有________个非零元素。

4.若从无向图的任意一个顶点出发进行一次深度优先搜索便可以访问该图的所有顶点,则该图一定是一个________________图。

5.将数据元素2,4,6,8,10,12,14,16,18,20依次存放于一个一维数组中(设该数组第一个元素的下标为1),然后采用折半查找元素15,被比较过的数组元素的下标依次为_____________。

6.顺序查找法,折半查找法,树形查找法和散列查找法这四种方法中,只有_____________________的平均查找长度与元素的个数n无关。

7.设无向连通图G的顶点数与边数和一立方体相同,即有8个顶点和12条边。

任意一棵G的生成树共有________________条边8.字符串’abcd’中共有________________个长度大于0小于4的子串。

9.将字符数组a[0..7,0..7]按行优先次序存储在起始地址为1000的连续的内存单元中,则元素a[6,2]的地址是:__________________________ 10.已知某带权连通无向图采用邻接矩阵存储方式,邻接矩阵以三元组表形式给出,部包括主对角线元素在内的下三角形部分元素对应的各三元组分别为(2,1,7),(3,1,6),(3,2,8),(4,1,9)(4,2,4),(4,3,6),(5,1,∞),(5,2,4),(5,3,∞),(5,4,2)。

该连通图的最小生成树的权值之和是 。

二、单项选择题(每题1分,共10分)1. ( )堆排序的时间复杂度和需附加的存储空间分别是: A O(n 2) 和O(1) B O(nlog 2n) 和O(1) C O(nlog 2n)和O(n) D O(n 2)和O(n)2.( )最佳二叉排序数的结构特点是:A 除最下两层可以不满外,其余都是满的B 除最下一层可以不满外,其余都是满的C 每个结点的左右子树的高度之差的绝对值不大于1D 最下层的叶子结点必须在最左边3.( )设计一个判别表达式中左、右括号是否配对出现的算法,采用什么数据结构最佳? A 、线性表的顺序存储结构 B 、队列C 、线性表的链式存储结构D 、栈4.( )线索二叉树是一种什么结构? A 逻辑 B 逻辑和存储 C 物理 D 线性 5.( )下列排序中,哪个是堆? A .(100,80,55,60,50,40,58,35,20)B .(100,80,55,60,50,40,35,58,20)C .(100,80,55,58,50,40,60,35,20)D .(100,70,55,60,50,40,58,35,20)6.( )若某完全二叉树的深度为h (设单结点的树的深度为1),则该完全二叉树中至少有几个结点?A .2hB .21h -C .21h +D .12h -7.( )在二叉排序树中进行查找的时间效率与什么有关?A .二叉排序树的深度B .二叉排序树的结点的个数C .被查找结点的度D .二叉排序树的存储结构8. ( )若二叉树中度为2的结点有15个,度为1的结点有10个,则该二叉树有几个结点?A.41 B.31 C.25 D.309.()只能在顺序存储结构上才能实现的查找方法是哪种?A.顺序查找B.树型查找C.折半查找D.散列查找10.()从未排序序列中任选一个元素,该元素将未排序序列分成前后两个部分,前一部分中所有元素均小于所选元素,而后一部分中所有元素均大于等于所选元素,所选元素处在排序的最终位置,分别对被分成的两部分中元素个数超过1的部分重复上述过程,直至整个排序结束。

数据结构-第7章图答案


7.3 图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点, 并且使图中的每个顶点仅被访问一次的过程。 一、深度优先搜索 从图中某个顶点V0 出发,访问此顶点,然后依次 从V0的各个未被访问的邻接点出发深度优先搜索遍 历图,直至图中所有和V0有路径相通的顶点都被访 问到,若此时图中尚有顶点未被访问,则另选图中 一个未曾被访问的顶点作起始点,重复上述过程, 直至图中所有顶点都被访问到为止。
void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组 visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if ( !visited[v]) { // v尚未访问 EnQueue(Q, v); // v入队列 while (!QueueEmpty(Q)) { DeQueue(Q, u); // 队头元素出队并置为u visited[u] = TRUE; Visit(u); // 访问u for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) EnQueue(Q, w); // u的尚未访问的邻接顶点w入队列Q
4。邻接多重表
边结点
mark ivex
顶点结点
ilink
jvex
jlink
info
data
firstedge
#define MAX_VERTEX_NUM 20 typedef emnu {unvisited, visited} VisitIf; typedef struct Ebox { VisitIf mark; // 访问标记 int ivex, jvex; // 该边依附的两个顶点的位置 struct EBox *ilink, *jlink; // 分别指向依附这两个顶点的下一条 边 InfoType *info; // 该边信息指针 } EBox; typedef struct VexBox { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 } VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum, edgenum; // 无向图的当前顶点数和边数 } AMLGraph;

数据结构第七章 排序


name 张涛 赵亮
冯博远 王强 李燕
7.2
基本原理
插入排序
每次将一个待排序的对象,按其关键字大小, 插入到前面已经排序好的一组对象的适当位臵上, 直到对象全部插入为止。
直接插入排序(Insert Sort)
希尔排序(Shell Sort)
7.2.1
直接插入排序
R[1]---R[i-1]
08 08
16 16
第三次
08
16
21
25* 25
49
希尔排序中d(间隔量)的取法 Shell最初的方案是 d= n/2, d=d/2, 直到d=1; Knuth的方案是d= d/3+1;
其它方案有:都取奇数为好;d互质为好 等等。
希尔排序的稳定性
如序列: 21 25 排序后为:08 16
R[0]有两个作用:
其一: 进入查找循环之前,保存 R[i] 的副本,使之不至 于因记录的后移而丢失R[i]中的内容; 其二: 在 while 循环时,“监视”下标变量 j 是否越界, 一旦越界(j<0),R[0]自动控制while循环的结束, 从而 避免了在while 循环内的每一次都要检测 j 是否越界( 即 省略了循环条件j>=0)。 因此,把 R[0] 称为“监视哨”。
第七章 排 序
本章内容
排序的概念和有关知识
常用的几种排序方法的基本思想、排序过 程和算法实现 各种排序算法的时间复杂度分析
学生成绩表
学号 姓名 高数 英语 总分
005 010 002
018 004
Chen Lin Gao Hong Wang Na
ZhangYang Zhao Pen
84 69 90

数据结构与算法(共11张PPT)


(b)入队3个元素(c)出队3个元素
(b) d, e, b, g入队
利用一组连续的存储单元(一维数组)依次存放从队 在循环队列中进行出队、入队操作时,队首、队尾指
队列示意图
在非空队列里,队首指针始终指向队头元素,而队
(b) d, e, b, g入队
8
Q.rear
a5
a4
Q.front
(d)入队2个元素
a1, a2, … , an
的指修针改 和是队依列先中进元先素出的Q的变.re原化a则情r 进况行。的,如图所示。
a3
Q.front
a2
a1
首到队尾的各个元素,称为顺序队列。
(c)
d, e出队Q.front
Q.front
◆出队:首先删去front所指的元素,然后将队首指针front+1,并
◆rear所指的单元始终为空(a。)空队列
i
i, j, k入队
(e)
1
2
3
k
r
01
j5
2
front
43
i
b, g出队
(f )
r, p,
p rear
s, t入队
循环队列操作及指针变化情况
入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针 ,故队空和队满时头尾指针均相等。因此,无法通过front=rear来 判断队列“空”还是“满”。解决此问题的方法是:约定入队前,
数据结构与算法
1算法基础 2数据结构
3栈
4队列
5链表 6树和二叉树
7查找
4队列
✓队列的基本概念 ✓队列运算
✓循环队列及其运算
4队列
1.队列的基本概念
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 2 4 8 9 10 5 11 12 6 13 14 3 7 15
3. 若非空二叉树有n0个叶结点,有n2个度为2的结点, 则 n0=n2+1
证明: 设该二叉树有n1个度为1的结点,结点总数为n,有 --------(1) n=n0+n1+n2 设二叉树的分支数目为B,有 B=n-1 --------(2) 这些分支来自于度为1的结点与度为2结点,即 B=n1+2n2 --------(3) 联列关系(1),(2)与(3),可得 1 n0=n2+1 证毕.
A
左是空返回 T 返回
B
>
C
左是空返回 右是空返回
D
visit(A);
左是空返回 T D 右是空返回 T visit(D); 返回 pre(T L); pre(T R); T 返回 T 返回 T 返回
visit(C); 先序序列:A
>
B D C
L); R);
>
>
>
中序遍历: void inorder (BinNode *rt) { if(rt==NULL) retrun; {inorder(rt->leftchild()); // 中序遍历左子树 visit(rt ); //访问根结点 inorder(rt->rightchild()); //中序遍历右子树 } }
A B D G E H C F
先序序列: ABDGCEFH 中序序列: DGBAECHF 后序序列: GDBEHFCA
练习
1.先序和中序遍历序列相同的二叉树 后序和中序遍历序列相同的二叉树 先序和后序和中序遍历序列相同的二叉树 2.二叉树中序遍历序列CDBAEGF,先序遍历序 列为ABCDEFG,画出该树
4 5 6
3 7
8 9 10 11 12 13 14 15
2. 深度为h 的非空二叉树最多有2h -1个结点.
证明: 由性质1可知,若深度为h的二叉树的每一层的结点 目都达到各自所在层的最大值,则二叉树的结点总数一 达到最大。即有 20+21+22+…+2i-1+ …+2h-1 = 2h-1 证毕.
叶子:K,L,F,G,M,I, 结点I的双亲:D 结点L的双亲: D I J 结点B,C,D为兄 结点K,L为兄弟 结点F,G为堂兄弟 结点A是结点F,G的祖 结点A的孩子:B,C, 结点B的孩子:E,F
结点A的层次:1 结点M的层次: 树的深度:
5.1.2
树的抽象数据类型
节点的类定义
树的类定义
2 4 6 5 7 3
4. 具有n个结点的完全二叉树的深度k=⎣log2n⎦+1.
证明:设深度为k, 则由性质2 {深度为h 的非空二叉树最多有2h -1个结点.} 和完全二叉树特性{除了最下层第k层以外,其余各层的结点数均
到达各层最多能有的2
i–1个结点
}
结点数n满足:2k-1-1<n≤2k-1 或写为2k-1≤n<2k 于是有:k-1≤log2n<k 因为 k-1和k均为整数 显然有└log2n┘=k-1,
A
B D
C
遍历序列: A B C D
+ a b c
先序遍历: 中序遍历: 后序遍历: 层次遍历:
/ * d e f
- + a * b- c d/ e f a + b * c - d- e / f a b c d- * + e f / - + / a * e f b- c d
练习:请分别写出先序,中序,后序遍历序列
特点: 非空树中至少有一个结点——根 树中各子树是互不相交的集合
只有根结点的树 A
有子树的树
A C F G H M

D I J
B E K L
子树
子树
子树
树的定义可以用如下形式化描述来表
Tree=(D,R)
其中:D是具有相同特性的数据元素的集合;若D只含有 一个元素,则R为空集,否则R是D上的某个二元关系H 集合,即R={H},H为如下描述的二元关系: 1)有且仅有一个结点没有前驱,该结点被称为树的根; 2)除树根结点外,其余每个结点有且仅有一个前驱结 3)包含树根结点在内的每个结点,可以有任意多个(包含 0个)后继。
第五章
树形结构
树是一类重要的非线性数据结构,是以 分支关系定义的层次结构
a*b+(c-d/e)*f
5.1 树的概念 5.1.1 树的基本概念
定义:树是n(n≥0)个结点的有限集T,在一棵非空树
中:
1)有且仅有一个特定的称为根的结点; 2)当n>1时,其余结点可分为m(m>0)个互不 相交的有限集合T1,T2,…,Tm,其中每个集合本身 又是一棵树,并且称为根的子树。
void preorder(BinNode *rt) { if(rt=order (rt->leftchild()); preorder (rt->rightchild()); } }
T 主程序 Pre( T ) T pre(T pre(T A L); R); pre(T pre(T T pre(T pre(T B L); R); C visit(B);
1 2
A
3
B
4 5 6
C
7
BT[1:15]
A B C D E F G H I J
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
D
8 9
E
10
F
G
H
I J
2. 一般二叉树的顺序存储结构
A
2 1
A
3
B D H J E F
C
4
B
5 6
C
7
G
8
D
9 10
E
11 12
F
13
G I
I
H
1 2 4 5 3
5.2.2
二叉树的实
一.二叉树的顺序存储结构
1. 完全二叉树的顺序存储结构
根据完全二叉树的性质5 ,对于深度为h 的完全二叉树, 将树中所有结点的数据信息按照编号的顺序依次存储到一 维数组BT[1:2h-1]中,由于编号与数组的下标一一对应, 该 数组就是该完全二叉树的顺序存储结构.
1 2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1 3 5 7
1 2 4 8 9 10 5 11 12 6 3 7 4 2 5 1 3 6
二叉树的性质
1. 一棵非空二叉树的第i 层最多有2i–1个结点(i≥1)。
证明(采用归纳法) (1).当i=1时,结论显然正确。非空二叉树的第1层有 仅有一个结点,即树的根结点. (2).假设对于第j层(1≤j≤i–1)结论也正确,即第j层最 多有2j-1个结点. (3).由定义可知, 二叉树中每个结点最多只能有两个 孩子结点。而第i–1层最多有2i–2个结点已由假设证明 若第i–1层的每个结点都有两棵非空子树, 则第i层的结点数目达到最大.,于是,应有 1 证毕. 2×2i–2 = 2i–1 2
二叉树的基本形态:
(空) 根 根 根 根
左 子 树
右 子 树
左 子 树
右 子 树
具有三个结点的二叉树具有以下五种基本形
1 2 4 8 9 10 5 11 12 6 13 14 3 7 15 4 6 2
1 3 5 7
1 2 4 8 9 10 5 11 12 6 3 7 4 2 5 1 3 6
两种特殊形态的二叉树
树型结构和线性结构的比 树型结构 根结点无前驱结 多个叶子结点无后 其它数据元素有一 前驱和多个后继 A B E K L F C G H M D I J 线性结构 第一个数据元素无前 最后一个数据元素无后 其它元素有且仅有一个直接 前驱和一个直接后继
A
B
C
D
5.1.3基本术语:
结点: 表示树中的元素,包括数据项及若干指向其子树的 分支 结点的度: 分支个数(结点拥有的子树个数)。 树的度: 树中所有结点的度的最大值 B E K F L A C G H D I J M 叶子结点: 度为零的结点 分支结点: 度大于零的结点 从根到结点的路径:由从根到 结点所经分支和结点构成
访问是一种抽象操作,是对结点的某种处理,例如可
以是求结点的度、或层次、打印结点的信息,或做其 他任何工作。 一次遍历后,使树中结点的非线性排列,按访问的先 后顺序变为某种线性排列。
遍历的次序:若设二叉树根为D,左子树为L,右子树
为R,并限定先左后右,则有以下三种遍历次序: LDR中序遍历; LRD后序遍历; DLR先序遍历
5.2 二叉树
二叉树是一种重要的数据结构类型,它有许多良 好的性质和简单的物理表示,它的特点是最多有两个 孩子,并且二叉树的子树有左右之分,且其子树的顺 序不能任意颠倒。 5.2.1 二叉树的定义及其主要特性 二叉树是有n(n≥0)个结点的有限集合,此集合 或者是空的,或者是由一个根结点加上两棵分别称为 左右子树的、互不相交的二叉树组成。
> >
B D
C B C D L R
> >
先序遍历序列:A B D C
D
中序遍历:
A
L
D
R
A B D C L D R
>
L
>
D R
>
B L
>
D R
>
C
D
中序遍历序列:B D A C
后序遍历:
A
L
R
D
A B D C L R D
>
L B
>
R D
>
C
相关文档
最新文档