数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版_第1页
数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版_第2页
数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版_第3页
数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版_第4页
数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构基础及深入及考试复习资料习题及实验参考答案见附录结论即从逻辑关系上描述数据, 它与数据是数据的逻辑结构在计算机存储器内的表示 (或映像)。4 大类:顺序、链式、索引、散列用以表示应用问题的数据模型。它由基本的数据类型构。它与数据类型实质上是一个概念,但其特征是使1、数据的逻辑结构是指数据元素之间的逻辑关系。 的存储无关,是独立于计算机的。2、数据的物理结构亦称存储结构, 它依赖于计算机。存储结构可分为3、抽象数据类型:由用户定义,成,并包括一组相关的服务(或称操作) 用与实现分离,实行封装和信息隐蔽(独立于计算机)4、 算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列

2、输入转换 为输出的计算步骤。5、在数据结构中,从逻辑上可以把数据结构分成( C )A、动态结构和表态结构B、紧凑结构和非紧凑结构C、线性结构和非线性结构D、内部结构和外部结构6、算法的时间复杂度取决于( A )C、问题的规模和待处理数据的初态A、问题的规模B、待处理数据的初态线性表1、线性表的存储结构包括顺序存储结构和链式存储结构两种。2、表长为 n 的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数为(E ),删除一个元素需要移动的元素的个数为( A )。A、 (n-1)/2 B、 n C、 n+1 D、 n-1 E、 n/2 F、 (n+1

3、)/23、 “线性表的逻辑顺序与存储顺序总是一致的。”这个结论是(A、正确的B、错误的C、不一定,与具体的结构有关4、线性表采用链式存储结构时,要求内存中可用存储单元的地址(A、必须是连续的B、部分地址必须是连续的G、 (n-2)/2B )C 一定是不连续的D )D 连续或不连续都可5、带头结点的单链表为 空的判定条件是(B 、 head-next=NULLhead为空的判定条件是B 、 head-next=NULLhead的尾结点P满足(A 、 head=NULL6、不带头结点的单链表 A 、 head=NULL7、非空的循环单链表A 、 p-next=NULLB )C 、 head-nex

4、t=head D 、 head!=NULLA )C、 head-next=head D 、 head!=NULLB 、 p=NULL C、 p-next=headD 、 p=head8、 在一个具有 n 个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是 B )A、O(1) B、 O(n) C、 O(n2)D、 O(nlog 2n)9、 在一个单链表中,若删除p 所指结点的后继结点,则执行( A 、 p-next=p-next-next;B、p=p-next;p-next=p-next-next;C、p-next=p-next;D、p= p-next-next;10、 在一个单链表中,

5、若在P所指结点之后插入 s所指结点,则执行( A 、 s-next=p;p-next=s;B 、 s-next=P-next;P-next=s;C、 s-next=P-next;P=s;D 、 P-next=s;s-next=P;s,则执行11、 在一个单链表中,已知q是P的前趋结点,若在q和P之间插入结点 A 、 s-next=P-next;P-next=s; B 、 P-next=s-next;s-next=P;C、 q-next=s;s-next=P;D 、 P-next=s;s-next=q;没有 前趋结点,其余每个结点有且只有12、在线性结构中,第一个结点 前趋结点。栈和队列输入序列

6、为( C, D) D , B)A,1 、在栈操作中,A、(A, B,C、(A, C,2、设栈 ST 用顺序存储结构表示,则栈B,C, D),不可能得到的输出数列是(B、( D, C, B, A)D、(C, A, D, B)ST 为空的条件( BB 、 ST.toP=ST.base=0D 、 ST.toP=ST.base=nA 、 ST.toP=ST.base0C 、 ST.toP=ST.basen3、 向一个栈顶指针为HS的链栈中插入一个s结点时,执行(A 、 HS-next=s;B 、 s-next=HS-next;HS-next=s;则执行(C、 s-next=HS;HS=S;D、 s-n

7、ext=HS;HS=HS-next;4、 从一个栈顶指针为HS 的链栈中删除一个结点,用 x 保存被删结点的值,A 、 x=HS;HS=HS-next;B、 HS=HS-next;x=HS-data;C、 x=HS-data;HS=HS-next; D、 s-next=HS;HS=HS-next;5、 用单链表表示的链示队列的队头在链表的(A )位置。A、链头 B、链尾C、链中6、 判定一个链队列Q (最多元素个数为n)为空的条件是(A、Q .front=Q.rearB、Q.front!=Q.rearC、 Q.front=(Q.rear+1)%n D、 Q.front!=(Q.rear+1)%

8、n7、在链队列Q中,插入要所指结点需顺序执行的指令是(A 、 Q.front-next=s;f=s;B、Q.rear-next=s;Q.rear=s;C、s-next=Q.rear;Q.rear=s;D、s-next=Q.front;Q.front=s;8、在一个链队列 Q 中,删除一个结点需要执行的指令是(A 、 Q.rear=Q.front-next;B、Q.rear-next=Q.rear-next-next;C、Q.front-next=Q.front-next-next;D 、 Q.front=Q.rear-next;9、栈和队列的共同点( C )A 、都是先进后出B 、都是先进先出

9、C、只允许在端点处插入和删除元素D、没有共同点10、栈的特点是 _先进后出,队列的特点是先进先出11、线性表、栈和队列都是线性结构,可以在线性表的任何位置插入和删除元素;对于栈只 能在栈顶插入和删除元素;对于队列只能在队尾插入元素和在队首删除元素。串和数组D )D、 BCDEFEF1、 设串 S仁ABCDEFG s2=PQRST函数 Concat(x,y)返回 x 和 y 串的连接串,Substr(s,l,j) 返回串s从序号i开始的j个字符组成的子串,length(s)返回串s的长度,则Concat(Substr(s1,2, length(s2), Substr(s1,length(s2),

10、2)的结果串是( A、 BCDEF B、 BCDEFG C、 BCPQRST2、串是一种特殊的线性表,其特殊性体现在(A、可以顺序存储B、数据元素是一个字符C、可以链接存储D、数据元素可以是多个字符3、设有两个串P和q,求q在P中首次出现的位置的运算称作(A、连接B、模式匹配C、求子串联D、求串长4、串的两种最基本的存储方式是顺序存储方式和链接存储方式。树和二叉树1、树最合适用来表示(A 、有序数据元素C、无序数据元素2、按照二叉树的定义,具有B )B、元素之间具有分支层次关系的数据D、元素之间无联系的数据C )种。A 、 3B、 4C、 5 D、 63、在一棵有 n 个结点的二叉树中,若度为

11、 的结点数为n0,则树的最大高度为( 度为(B ),其叶结点数为(2 的结点数为 n2 ,度为 1 ),其叶结点数为( );若采用链表存储结构,的结点数为nj,度为0G );树的最小高则有( I )3 个结点的二叉树有(个空链域。B 、 log 2n+1H 、 1A、 n/2G、 n2 +14、在一棵二叉树上第A、 8B、 16C、 log2n I 、 n+1J、n15 层的结点数最多为(D、 nK 、 n2BF、 n1 + n2C、 155、深度为 5 的二叉树至多有(A、 16B、 32 C、 31D、 32C )个结点。D 、 10E、 n0 + n1 + n2L、 n1 +1假设根结点

12、的层数为0)6、在一非空二叉树的中序遍历序列中,根结点的右边(A、只有右子树上的所有结点B、只有右子树上的部分结点C、只有左子树上的部分结点D、只有左子树上的所有结点7、 一棵完全二叉树按层次遍历的序列为ABCDEFGHI ,则在先序遍历中结点 E 的直接前趋 为( D ),后序遍历中结点 B 的直接后继是( E )。A、B B、DC、A&已知某二叉树的后序遍历序列是(D )A、 acbed B、 decab C、 deabc D、 cedba9、在树形结构中,树根结点没有前趋1个前趋结点;叶子结点没有 后继结点可以任意多个10、有一棵树如图所示,后继结点,其余每个结点有且只有其余每个结点的结

13、点,回答下面的问题:D、 I E、 Fdabec冲序遍历序列是debac,它的前序遍历序列是K1K4;结点 _ ;结,这棵树的叶子结点是 _K2,K5,K7,_;这棵树的度为 3;这棵树的深度是 K5,K6;结点k3的父结点是 K1CDBAEGF,前序遍历序列为 ABCDEFG,试问能不能否这棵树的根结点是k3的度是2_点k3的子女是_11、已知一棵二叉树的中序遍历序列为能惟一确定一棵二叉树,若能请画出该二叉树。 若给定前序遍历序列和后序遍历序列,惟一确定一棵二叉树,说明理由。答:由中序遍历序列和前序遍历序列或中序遍历序列和后序遍历序列可以惟一确定一棵二叉 树。基本思想是前序(后序)定根,中序

14、分左右。对于给定的前序和中序序列。可确定根结点为A,以A为根的左子树结点为 B,C,D,右子树结点为 E, F,G。进一步可确定所有子树的根结点,因而也就确定了整个二叉树。对 应的二叉树如图所示:left00237580101datajhfdbacegiright00094000004567891012、设二叉树1bt的存储结构如下:23由前序遍历和后序遍历序列不能惟一确定一棵二叉树。 而后序遍历序列都是如图所示为4棵不同的二叉树,它CBA。们的前序遍历序列都是ABC ,其中bt为树根结点指针,left, right分别为结点的左右孩子指针域,data为结点的数据域,请完成下列各题:画出二叉树

15、bt的逻辑结构写出按前序、中序和后序遍历二叉树bt所得到的结点序列。答:二叉树bt的逻辑结构如图所示:前序遍历:abcedfhgij中序遍历:ecbhfdjiga后序遍历:echfjigdbaT,试写出求二叉树的叶13、给定一棵以二叉链表存储结构表示的二叉树,其根结点指针为 子数目的算法。int Cou ntLeaf (BiTree T)返回指针T所指二叉树中所有叶子结点个数if (!T ) return 0;if (!T-lchild & !T-rchild) return 1;elsem = CountLeaf( T- lchild);n = CountLeaf( T- rchild);r

16、eturn (m+n); /else / Cou ntLeafT,试写出求二叉树的深14、给定一棵以二叉链表存储结构表示的二叉树,其根结点指针为 度的算法。int Depth (BiTree T ) / 返回二叉树的深度 if ( !T )depthval = 0;else depthLeft = Depth( T- lchild ); depthRight= Depth( T- r child );depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight);return depthval;1、一个有 n 个顶点的无向图最多有(

17、A、 n B 、 n(n-1)C、 n(n-1)/22、具有 6个顶点的无向图至少应有(A、 5 B、 6C、 73、存储稀疏图的数据结构常用的是(A、邻接矩阵B、三元组4、在有向图的邻接表存储结构中,顶点A、顶点V的度的边数D、C )条边。D 、 2nA )条边才能确保是一个连通图。8C )C、邻接表D、十字链表V 在表结点中出现的次数是(B、顶点V的出度C、顶点V的入度C )D 、依附于顶点 V)B、拓扑有序的C、无序的若从顶点 a 出发按深度优先搜索法进行遍历,则可能得到的一种),按广度优先搜索法进行遍历,则可能得到的一种顶点序列为顶点序列为( ( B )。 A 、 abecdf A 、

18、 abcedf5、用 DFS 遍历一个无环有向图,并在 DFS 算法退栈返回时,打印出相应的顶点,则输出 的顶点序列是( AA、逆拓扑有序的6、已知一个图如图所示,DB 、 acfebdC、 acebfdD 、 acfdebB 、 abcefdC、 abedfcD 、 acfdeb7、采用邻接表存储的图的广度优先搜索遍历算法类似于二叉树的(D )A、中序遍历B、先序遍历C、后序遍历D、按层遍历8、已知一个图如图所示,则由该图得到的一种拓扑序列为(A )A、V1,V4,V6,V2,V5,V3 B、V1,V2,V3,V4,V5,V6C、V1,V4,V2,V3,V6,V5 D、V1,V2,V4,V6

19、,V3,V59、 在图形结构中,每个结点的前趋结点数和后续结点数可以任意多个10、在AOE网中,从源点到汇点各活动时间总和最长的路径称为关键路径。11、给出图G,如图所示:(1) 给出图G的邻接表(画图即可)V4为根,画出图G的深度优先生成树和广度优(2) 在你给出的邻接表的情况下,以顶点 先生成树。(3 )将你画出的广度优先生成树转换为对应的二叉树。答:(1)图的邻接表如下图所示:略(2)以顶点V4为根的深度优先生成树和广度优先生成树如图所示(3)广度优先生成树转换成二叉树如下图所示附录 习题及实验参考答案习题 1 参考答案1.1. 选择题(1). A. (2). A. (3). A. (4

20、). B.,C. (5). A. (6). A. (7). C. (8). C. (9). B. (10.) A.1.2.(1).(2).(3).(4).(5).(6).(7).(8).(9).(10).填空题数据 逻辑结构物理结构线性数据结构 树型结构 图结构顺序存储链式存储索引存储 散列表(Hash)存储变量的取值范围 操作的类别数据元素间的逻辑关系 数据元素存储方式或者数据元素的物理关系 关系 网状结构 树结构空间复杂度和时间复杂度 空间 时间0( n)关系1.3 名词解释如下:数据: 数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。 数据项: 数据项指不可分割

21、的、 具有独立意义的最小数据单位, 数据项有时也称为字段或域。 数据元素:数据元素是数据的基本单位, 在计算机程序中通常作为一个整体进行考虑和处理, 一个数据元素可由若干个数据项组成。数据逻辑结构: 数据的逻辑结构就是指数据元素间的关系。数据存储结构: 数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。 数据类型: 是指变量的取值范围和所能够进行的操作的总和。算法: 是对特定问题求解步骤的一种描述,是指令的有限序列。1.4语句的时间复杂度为:(1)0 (n 2)(2)0 (n 2)(3)20 (n 2)(4)0 (n-1)(5)30 (n 3)1.5参考程序:main()int X,

22、Y,Z ;scanf( “%d, %d, %d”,&X,&Y,Z) ; if (X=Y)if(X=Z)if (Y=Z)1.6 参考程序: main() int i,n; float x,a,p; printf( “ printf( “nn=”);scanf( nx=”);scanf(%f”%f”,&n);,&x);for(i=0;i=n;i+) scanf( “%f ”,&ai); p=a0; for(i=1;i=X)if (Y=Z) printf(“ %d, %d, %d ”,Y,Z,X);else printf(“ %d, %d, %d ”,Z,Y,X);else printf(“ %d,

23、 %d, %d ”,Y,X,Z);(2). 顺序存储和链式存储.O (n) O(n)(4) . n-i+1 n-i(5) .(6).(7).(8).链式数据前驱O (1)指针后继O(n)(9) . s-next=p-next; p-next=s ;(10) . s-next2.3. 解题思路:将顺序表A中的元素输入数组a,若数组a中元素个数为n,将下标为0,1,2, ,(n-1 ) 12的元素依次与下标为 n,n-1,(n-1 ) 12的元素交换,输出数组a的元素。参考程序如下:main() int i,n;float t,a;printf( “ nn=”);scanf( “%f”,&n);f

24、or(i=0;i=n-1;i+) scanf( “%f ”,&ai);for(i=0;i=(n-1)/2;i+) t=ai; ai =an-1-i; an-1-i=t; for(i=0;i=n-1;i+) printf(“%f”,ai);2.4 算法与程序:main()int i,n;float t,a;printf( “ nn=”);scanf( “%f”,&n); for(i=0;in;i+)scanf( “%f ”,& ai);for(i=1;ia0 t=ai; ai =a0; a0=t;printf( “ %f”,a0);for(i=2;ia1 t=ai; ai =a1; a1=t;p

25、rintf( “ %f”,a0);2.5 算法与程序: main()int i,j,k,n;float x,t,a;printf(“ nx =” );scanf(printf(“ nn=” );scanf(for(i=0;in;i+) scanf( “%f ”,&ai);%f”%f”,& x); ,&n);/输入线性表中的元素for (i=0; in; i+) /k=i;for (j=i+1; jn; j+) if (ajak) k=j; if (kj) t=ai;ai=ak;ak=t; 对线性表中的元素递增排序for(i=0;ix) break; for(k=n-1;k=i;i-) ak+1

26、=ak; ai=x;/移动线性表中元素,然后插入元素 x/ %f”,ai);for(i=0;i=n;i+)printf(依次输出线性表中的元素A和B的元素,比较 A B当前的元素的值,将较小值的元素赋给 C 即可。 C 的2.6 算法思路:依次扫描C,如此直到一个线性表扫描完毕,最后将未扫描完顺序表中的余下部分赋给 容量要能够容纳 A、 B 两个线性表相加的长度。有序表的合并算法:void merge (SeqList A, SeqList B, SeqList *C) int i , j , k ;i=0;j=0 ; k=0;while ( i=A.last & j=B.last )if (

27、A.dataidatak+=A.datai+;elseC-datak+=B.dataj+while (idatak+= A.datai+ while (jdatak+=B.dataj+C-last=k-1 ;2.7算法思路:依次将 A中的元素和B的元素比较,将值相等的元素赋给 C,如此直到线性 表扫描完毕,线性表 C 就是所求递增有序线性表。算法:void merge (SeqList A, SeqList B, SeqList *C) int i , j , k ;i=0;j=0 ; k=0;while ( i=A.last)while ( jdatak+=A.datai+;C-last=k

28、-1 ;习题 3 参考答案3.1. 选择题(1) . D (2). C (3). D (4). C (5). B (6). C (7). C (8). C (9). B (10).AB(11) . D (12). B (13). D (14). C (15). C (16). D(17). B (18). C (19). C (20). CFILO, FIFO-1, 3 4 X * + 2 Y * 3 / - stack.top+, stack.sstack.top=x pllink-rlink=p-rlink, p-rlink-llink=p-rlink (R-F+M)%M top1+1=t

29、op2F=R front=rear front=(rear+1)%nN-13.2. 填空题(1)(2)(3)(4)(5)(6)(7)(8)(9)(10),push )或者读取栈顶元素或者称为“弹出、出3.3 答:一般线性表使用数组来表示的 线性表一般有插入、删除、读取等对于任意元素的操作 而栈只是一种特殊的线性表 栈只能在线性表的一端插入(称为入栈栈” (pop) 。3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。 不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端( top )删除,一端 (rear) 插入。3.5 答:可能序列有 14 种:ABCD; AC

30、BD;ACDB;ABDC;ADCB;BACD;BADC;BCAD;BCDA;BDCA; CBAD; CBDA; CDBA; DCBA。3.6 答:不能得到 4,3,5,6,1,2,最先出栈的是在 2 前的序列,可以得到 1 ,3,5,4,2,6,按如下方式进行pop(), push(4), push(5), pop(), pop(), pop(), push(6), pop()3.7 答: stack3.8 非递归 :int vonvert (int no,int a) /4, 则按 321 的方式出,不可能得到 1 push(1), pop(), push(2), push(3),将十进制数

31、转换为2 进制存放在 a ,并返回位数int r;SeStack s,*p;P=&s;Init_stack(p); while(no)push(p,no%2);no/=10;r=0;while(!empty_stack(p)pop(p,a+r);r+;return r;递归算法 : void convert(int no) if(no/20)Convert(no/2);Printf( “%d”,no%2); else printf( “ %d” ,no);3.9 参考程序:void view(SeStack s)SeStack *p; / 假设栈元素为字符型 char c;p=&s;while

32、(!empty_stack(p)c=pop(p);printf( “%c”,c);printf( ” n”);答: char 参考程序:3.103.11 void out(linkqueue q) int e; while(q.rear !=q.front )dequeue(q,e);print(e); / 打印 习题 4参考答案4.1 选择题:填空题: 串长相等且对应位置字符相等 不含任何元素的串, 0 所含字符均是空格,所含空格数 10“helloboy ”18(1). A (2). D (3). C (4). C (5). B (6). B (7). D (8). A (9). B (1

33、0). D 4.2(1)(2)(3)(4)(5)1066由零个或多个任意字符组成的字符序列 串中所含不同字符的个数36(6)(7)(8)(9)(10),8,7)=” STUDEN”T , SubStr(t ,4.3 StrLength (s)=14, StrLength (t)=4, SubStr( s 2,1)=”O”,StrIndex(s, “A”)=3, StrIndex (s ,t)=0, StrRep(s ,“STUDEN”T,q)=” I AMA WORKE”R,4.4 StrRep(s, ”Y”,”+”);StrRep(s, ”+*”,”*Y”);4.5 空串:不含任何字符;空格

34、串:所含字符都是空格 串变量和串常量 : 串常量在程序的执行过程中只能引用不能改变;串变量的值在程序执行过程中是可以改变和重新赋值的主串与子串:子串是主串的一个子集串变量的名字与串变量的值:串变量的名字表示串值的标识符4.6int EQUAI(S,T)char *p ,*q;p=& S;q=& T;while(* P&*q)if(* p!=*q)return *p-*q;P+; q+;return *p-*q;4.7(1)6*8*6=288(2)1000+47*6=1282 1000+(8+4)*6=1072(4)1000+(6*7+4)*6=12764.8i jv1121215-132144

35、347542665187539矩阵的三元组表习题5参考答案5.1选择(I) C(2)B ( 3) C (4) B(5)C(6)D (7) C ( 8) C(9)B (10)C(II) B (12) C (13) C (14) C (15) C5.2填空(1)1(2)1036; 1040(3)2i_(4)_1_ ; n ; n-1 ;2(5)211;电(6)ACDBGJKIHFE(7)p!=NULL(8)Hufman 树(9)其第一个孩子;下一个兄弟(10)先序遍历;中序遍历5.3G L、I、M KB、D E、J;叶子结点:C、F、A、非终端结点: 各结点的度: 结点:度:树深:5.4无序树形态

36、如下:二叉树形态如下:5.5二叉链表如下:三叉链表如下:先序遍历序列 中序遍历序列 后序遍历序列:ABDEHICFJG:DBHEIAFJCG :DHIEBJFGCA5.7先序序列和中序序列相同:后序序列和中序序列相同:先序序列和后序序列相同:空树或缺左子树的单支树; 空树或缺右子树的单支树; 空树或只有根结点的二叉树。5.8这棵二叉树为5.9先根遍历序列后根遍历序列层次遍历序列:ABFGLCDIEJMK:FGLBCIDMJKEA:ABCDEFGLIJKM5.10证明:设树中结点总数为n=no + n1 + +n m再设树中分支数目为 B,B=ni + 2n 2 + 3n 3 + n,叶子结点数

37、为n0,则(1)+ m nm(2)因为除根结点外,每个结点均对应一个进入它的分支,所以有n= B + 1将( 1)和( 2)代入( 3),得+ m nm + 1no + ni + +n m = n i + 2n2 + 3n 3 +从而可得叶子结点数为:no = n 2 + 2n 3 + +( m-1)nm + 1 5.11由 5.1o 结论得, no = (k-1)n k + 1又由 n=n 0 + nk,得 nk= n-n 0,代入上式,得no = (k-1) (n-no)+ 1叶子结点数为: n0 = n (k-1) / k 5.12 int NodeCount(BiTree T) / 计

38、算结点总数if(T)if (T- lchild=NULL )&( T - rchild=NULL ) return 1;elsereturn NodeCount(T- lchild ) +Node ( T - rchild )+1; elsereturn 0;5.13void ExchangeLR(Bitree bt)*/* 将 bt 所指二叉树中所有结点的左、右子树相互交换 if (bt & (bt-lchild | bt-rchild) bt-lchildbt-rchild;Exchange-lr(bt-lchild);Exchange-lr(bt-rchild);/* ExchangeL

39、R */ 5.14int IsFullBitree(Bitree T)/* 是则返回 1 ,否则返回 0。*/Init_Queue(Q); /* 初始化队列 */flag=0;In_Queue(Q , T); /* 根指针入队列 ,按层次遍历 */ while(!Empty_Queue (Q)Out_Queue(Q,p);if(!p) flag=1; /* 若本次出队列的是空指针时,则修改 flag 值为 1 。若以后出队列 的指针存在非空,则可断定不是完全二叉树 */else if (flag) return 0; /* elseln_Queue(Qln_Queue(Q/* while */

40、return 1; /*叉树*/* IsFullBitree */断定不是完全二叉树*/5.15转换的二叉树为:,p-lchild);,p-rchild); /*不管孩子是否为空,都入队列。*/只有从某个孩子指针开始,之后所有孩子指针都为空,才可断定为完全二GO5.16对应的森林分别为:AB5.215.17typ edef char elemt ype;typ edef struct elemt ype data;int parent; NodeTy pe;(1)求树中结点双亲的算法:int Paren t(NodeT ype t , elemt ype x)/* X不存在时返回-2,否则返回

41、X双亲的下标(根的双亲为-1 */for(i=0;iMAXNODE;i+)if(x=ti.data) return ti. parent;return -2;/*Parent*/(2)求树中结点孩子的算法:void Childre n(N odeT ype t , elemt ype x) for(i=0;i=MAXNODE) printf(else flag=0;for(j=0;jMAXNODE;j+)if(i=tj. parent) printf( “ x 的孩子:cn ”flag=1;if(flag=0) printf(/*Childre n*/“X不存在n ”);,tj.data);“

42、X无孩子n ”);typedef char elemtype;typedef struct ChildNode int childcode;struct ChildNode *nextchild;typedef struct elemtype data;struct ChildNode *firstchild; NodeType;(1) 求树中结点双亲的算法 : int ParentCL(NodeType t , elemtype x)/* x 不存在时返回 -2, 否则返回 x 双亲的下标 */ for(i=0;i=MAXNODE) return -2; /* x /* 搜索 x 的双亲 *

43、/ for(i=0;inextchild) if(loc=p-childcode) return i; /*返回 x 结点的双亲下标 */* ParentL */不存在 */(2) 求树中结点孩子的算法 : void ChildrenCL(NodeType t , elemtype x) for(i=0;inextchild) printf( “ x 的孩子 :%cn ” ,tp- childcode.data); flag=1; if(flag=0) printf( return;/*if*/ printf( “ return;/* ChildrenL */x 无孩子 n ” );x 不存在

44、 n ” );typ edef char elemt ype;typ edef struct TreeNode elemt ype data;struct TreeNode *firstchild;struct TreeNode *n extsibli ng;层次遍历方法*/ NodeTy pe;void Childre nCSL(NodeTy pe *t, elemty pe x) /*Init_Queue(Q); /*初始化队列 */ln_Queue(Q,t);coun t=0;while(!E mp ty_Queue (Q)Out_Queue(Q, p);if(p-data=x) /*输

45、出x的孩子*/p=p-firstchild;if(!p) printf(无孩子 n ”);else printf(“x 的第 %i 个孩子:cn ”,+count, p-data);/*输出第一个孩子 */p=p-nextsibling; /*沿右分支 */while( p)printf( “x 的第 %i 个孩子:%cn ”,+count, p-data);p=p- n extsibli ng;return;if(p- firstchild) In_Queue(Q, p- firstchild);if(p- n extsibli ng) In _Queue(Q ,p- n extsibli ng);/* Childre nCSL */5.20(1)哈夫曼树为:CD(2)在上述哈夫曼树

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论