ImageVerifierCode 换一换
格式:DOCX , 页数:74 ,大小:329.59KB ,
资源ID:10313786      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10313786.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版.docx

1、数据结构第4版习题及实验参考答案数据结构复习资料完整版c语言版数据结构(第4版)习题及实验参考答案-数据结构复习资料完整版(c语言版)数据结构基础及深入及考试复习资料 习题及实验参考答案见附录结论 1、数据的逻辑结构是指数据元素之间的逻辑关系。即从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。 2、数据的物理结构亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。存储结构可分为4大类:顺序、链式、索引、散列 3、抽象数据类型:由用户定义,用以表示应用问题的数据模型。它由基本的数据类型构成,并包括一组相关的服务(或称操作)。它与数据类型实质上是一个概念,但

2、其特征是使用与实现分离,实行封装和信息隐蔽(独立于计算机)。 4、算法:是对特定问题求解步骤的一种描述,它是指令的有限序列,是一系列输入转换为输出的计算步骤。 5、在数据结构中,从逻辑上可以把数据结构分成( C ) A、动态结构和表态结构 B、紧凑结构和非紧凑结构 C、线性结构和非线性结构 D、内部结构和外部结构6、算法的时间复杂度取决于( A ) A、问题的规模 B、待处理数据的初态 C、问题的规模和待处理数据的初态线性表 1、线性表的存储结构包括顺序存储结构和链式存储结构两种。 2、表长为n的顺序存储的线性表,当在任何位置上插入或删除一个元素的概率相等时,插入一个元素所需移动元素的平均次数

3、为( E ),删除一个元素需要移动的元素的个数为( A )。 A、(n-1)/2 B、n C、n+1 D、n-1 E、n/2 F、(n+1)/2 G、(n-2)/2 3、“线性表的逻辑顺序与存储顺序总是一致的。”这个结论是( B ) A、正确的 B、错误的 C、不一定,与具体的结构有关 4、线性表采用链式存储结构时,要求内存中可用存储单元的地址( D ) A、必须是连续的 B、部分地址必须是连续的C一定是不连续的D连续或不连续都可以 5、带头结点的单链表为 空的判定条件是( B ) A、head=NULL B、head-next=NULL C、head-next=head D、head!=NU

4、LL 6、不带头结点的单链表head为空的判定条件是( A )A、head=NULL B、head-next=NULL C、head-next=head D、head!=NULL 7、非空的循环单链表head的尾结点P满足( C ) A、p-next=NULL B、p=NULL C、p-next=head D、p=head 8、在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( B ) A、O(1) B、O(n) C、O(n2) D、O(nlog2n) 9、在一个单链表中,若删除p所指结点的后继结点,则执行( A )A、p-next=p-next-next;B、p=p-n

5、ext;p-next=p-next-next;C、p-next=p-next;D、p= p-next-next; 10、在一个单链表中,若在p所指结点之后插入s所指结点,则执行( B ) 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;11、在一个单链表中,已知q是p的前趋结点,若在q和p之间插入结点s,则执行( C )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-nex

6、t=s;s-next=q;12、在线性结构中,第一个结点 没有 前趋结点,其余每个结点有且只有 1 个前趋结点。栈和队列1、在栈操作中,输入序列为(A,B,C,D),不可能得到的输出数列是( D )5、用单链表表示的链示队列的队头在链表的( A )位置。 A、链头 B、链尾 C、链中6、判定一个链队列(最多元素个数为n)为空的条件是(A)、.front=Q.rear B、Q.front!=Q.rearC、Q.front=(Q.rear+1)%n D、Q.front!=(Q.rear+1)%n7、在链队列中,插入要所指结点需顺序执行的指令是(B)A、Q.front-next=s;f=s;B、Q.

7、rear-next=s;Q.rear=s;C、s-next=Q.rear;Q.rear=s;D、s-next=Q.front;Q.front=s;8、在一个链队列Q中,删除一个结点需要执行的指令是( C ) 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、都是先进先出 C、只允许在端点处插入和删除元素D、没有共同点10、栈的特点是_先进后出,队列的特点是先进先出11、

8、线性表、栈和队列都是线性结构,可以在线性表的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入元素和在队首删除元素。串和数组1、设串s1=ABCDEFG,s2=PQRST,函数Concat(x,y)返回x和y串的连接串,Substr(s,I,j)返回串s从序号i开始的j个字符组成的子串,length(s)返回串s的长度,则Concat(Substr(s1,2, length(s2), Substr(s1,length(s2),2)的结果串是( D )A、BCDEF B、BCDEFG C、BCPQRST D、BCDEFEF2、串是一种特殊的线性表,其特殊性体现在( D

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

10、( E ),其叶结点数为( G );树的最小高度为( B ),其叶结点数为( G );若采用链表存储结构,则有( I )个空链域。A、n/2 B、log2n+1 C、log2n D、n E、n0 + n1 + n2 F、n1 + n2 G、n2 +1 H、1 I、n+1 J、n1 K、n2 L、n1 +14、在一棵二叉树上第5层的结点数最多为( B )。(假设根结点的层数为0)A、8 B、16 C、15 D、325、深度为5的二叉树至多有( C )个结点。A、16 B、32 C、31 D、106、在一非空二叉树的中序遍历序列中,根结点的右边( A )A、只有右子树上的所有结点 B、只有右子树上

11、的部分结点C、只有左子树上的部分结点 D、只有左子树上的所有结点7、一棵完全二叉树按层次遍历的序列为ABCDEFGHI,则在先序遍历中结点E的直接前趋为( D ),后序遍历中结点B的直接后继是( E )。A、B B、D C、A D、I E、F F、C8、已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是( D )A、acbed B、decab C、deabc D、cedba9、在树形结构中,树根结点没有_前趋_结点,其余每个结点有且只有_1_个前趋结点;叶子结点没有_后继_结点,其余每个结点的后继结点可以_任意多个_。10、有一棵树如图所示,回答下面的问题:这

12、棵树的根结点是_K1_,这棵树的叶子结点是_K2,K5,K7,K4_;结点k3的度是_2_;这棵树的度为_3_;这棵树的深度是_4_;结点k3的子女是_K5,K6_;结点k3的父结点是_K1_.11、已知一棵二叉树的中序遍历序列为CDBAEGF,前序遍历序列为ABCDEFG,试问能不能惟一确定一棵二叉树,若能请画出该二叉树。若给定前序遍历序列和后序遍历序列,能否惟一确定一棵二叉树,说明理由。答:由中序遍历序列和前序遍历序列或中序遍历序列和后序遍历序列可以惟一确定一棵二叉树。基本思想是前序(后序)定根,中序分左右。对于给定的前序和中序序列。可确定根结点为A,以A为根的左子树结点为B,C,D,右子

13、树结点为E,F,G。进一步可确定所有子树的根结点,因而也就确定了整个二叉树。对应的二叉树如图所示:由前序遍历和后序遍历序列不能惟一确定一棵二叉树。如图所示为4棵不同的二叉树,它们的前序遍历序列都是ABC,而后序遍历序列都是CBA。12、设二叉树bt的存储结构如下:12345678910left00237580101datajhfdbacegiright0009400000其中bt为树根结点指针,left,right分别为结点的左右孩子指针域,data为结点的数据域,请完成下列各题:画出二叉树bt的逻辑结构写出按前序、中序和后序遍历二叉树bt所得到的结点序列。答:二叉树bt的逻辑结构如图所示:前

14、序遍历:abcedfhgij中序遍历:ecbhfdjiga后序遍历:echfjigdba13、给定一棵以二叉链表存储结构表示的二叉树,其根结点指针为T,试写出求二叉树的叶子数目的算法。int CountLeaf (BiTree T)/返回指针T所指二叉树中所有叶子结点个数 if (!T ) return 0; if (!T-lchild & !T-rchild) return 1; else m = CountLeaf( T-lchild); n = CountLeaf( T-rchild); return (m+n); /else / CountLeaf14、给定一棵以二叉链表存储结构表示的

15、二叉树,其根结点指针为T,试写出求二叉树的深度的算法。int Depth (BiTree T ) / 返回二叉树的深度 if ( !T ) depthval = 0; else depthLeft = Depth( T-lchild ); depthRight= Depth( T-rchild ); depthval = 1 + (depthLeft depthRight ? depthLeft : depthRight); return depthval;图1、一个有n个顶点的无向图最多有( C )条边。A、n B、n(n-1) C、n(n-1)/2 D、2n2、具有6个顶点的无向图至少应有

16、( A )条边才能确保是一个连通图。A、5 B、6 C、7 D、83、存储稀疏图的数据结构常用的是( C )A、邻接矩阵 B、三元组 C、邻接表 D、十字链表4、在有向图的邻接表存储结构中,顶点V在表结点中出现的次数是( C )A、顶点V的度 B、顶点V的出度 C、顶点V的入度 D、依附于顶点V的边数5、用DFS遍历一个无环有向图,并在DFS算法退栈返回时,打印出相应的顶点,则输出的顶点序列是( A )A、逆拓扑有序的 B、拓扑有序的 C、无序的6、已知一个图如图所示,若从顶点a出发按深度优先搜索法进行遍历,则可能得到的一种顶点序列为( D ),按广度优先搜索法进行遍历,则可能得到的一种顶点序

17、列为( B )。A、abecdf B、acfebd C、acebfd D、acfdebA、abcedf B、abcefd C、abedfc D、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,V3,V59、在图形结构中,每个结点的前趋结点数和后续结点数可以_任意多个_。10、在AOE网中,从源点到汇点各活

18、动时间总和最长的路径称为关键路径。11、给出图G,如图所示:(1)给出图G的邻接表(画图即可)(2)在你给出的邻接表的情况下,以顶点V4为根,画出图G的深度优先生成树和广度优先生成树。(3)将你画出的广度优先生成树转换为对应的二叉树。答: (1)图的邻接表如下图所示:略(2)以顶点V4为根的深度优先生成树和广度优先生成树如图所示(3)广度优先生成树转换成二叉树如下图所示附录 习题及实验参考答案习题1参考答案1.1.选择题(1). A. (2). A. (3). A. (4). B.,C. (5). A. (6). A. (7). C. (8). C. (9). B. (10.) A.1.2.填

19、空题(1). 数据 关系(2). 逻辑结构 物理结构(3). 线性数据结构 树型结构 图结构(4). 顺序存储 链式存储 索引存储 散列表(Hash)存储(5). 变量的取值范围 操作的类别(6). 数据元素间的逻辑关系 数据元素存储方式或者数据元素的物理关系(7). 关系 网状结构 树结构(8). 空间复杂度和时间复杂度(9). 空间 时间(10). (n)1.3 名词解释如下:数据:数据是信息的载体,是计算机程序加工和处理的对象,包括数值数据和非数值数据。数据项:数据项指不可分割的、具有独立意义的最小数据单位,数据项有时也称为字段或域。数据元素:数据元素是数据的基本单位,在计算机程序中通常

20、作为一个整体进行考虑和处理,一个数据元素可由若干个数据项组成。数据逻辑结构:数据的逻辑结构就是指数据元素间的关系。数据存储结构:数据的物理结构表示数据元素的存储方式或者数据元素的物理关系。数据类型:是指变量的取值范围和所能够进行的操作的总和。算法:是对特定问题求解步骤的一种描述,是指令的有限序列。1.4 语句的时间复杂度为:(1) (n2) (2) (n2)(3) (n2)(4) (n-1)(5) (n3)1.5 参考程序:main()int X,Y,Z;scanf(“%d, %d, %d”,&X,&Y,Z);if (X=Y) if(X=Z) if (Y=Z) printf(“%d, %d,

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

22、anf(“%f ”,&ai); p=a0;for(i=1;inext=p-next; p-next=s ;(10). s-next 2.3. 解题思路:将顺序表A中的元素输入数组a,若数组a中元素个数为n,将下标为0,1,2,(n-1)/2的元素依次与下标为n,n-1, (n-1)/2的元素交换,输出数组a的元素。参考程序如下:main() int i,n;float t,a;printf(“nn=”);scanf(“%f”,&n);for(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

23、=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; printf(“%f”,a0);2.5 算法与程序:main() int i,j,k,n;float x,t,a;printf(“nx=”);scanf(“%f”,&x);

24、printf(“nn=”);scanf(“%f”,&n);for(i=0;in;i+)scanf(“%f ”,&ai); / 输入线性表中的元素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-) / 移动线性表中元素,然后插入元素x ak+1=ak; ai=x; for(i=0;i=n;i+) / 依次输出线性表中的元素printf(“%f”,ai);2.6 算法思路:依次扫描A和

25、B的元素,比较A、B当前的元素的值,将较小值的元素赋给C,如此直到一个线性表扫描完毕,最后将未扫描完顺序表中的余下部分赋给C即可。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 (A.dataidatak+=A.datai+; else C-datak+=B.dataj+;while (idatak+= A.datai+;while (jdatak+=B.dataj+;C-l

26、ast=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-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 (

27、13). D (14). C (15). C (16). D(17). B (18). C (19). C (20). C 3.2.填空题(1)FILO, FIFO(2)-1, 3 4 X * + 2 Y * 3 / -(3)stack.top+, stack.sstack.top=x(4)pllink-rlink=p-rlink, p-rlink-llink=p-rlink(5)(R-F+M)%M(6)top1+1=top2(7)F=R(8)front=rear(9)front=(rear+1)%n(10)N-13.3 答:一般线性表使用数组来表示的线性表一般有插入、删除、读取等对于任意元素的操作而栈只是一种特殊的线性表栈只能在线性表的一端插入(称为入栈,push)或者读取栈顶元素或者称为“弹出、出栈”(pop)。3.4 答:相同点:栈和队列都是特殊的线性表,只在端点处进行插入,删除操作。不同点:栈只在一端(栈顶)进行插入,删除操作;队列在一端(top)删除,一端(rear)插入。3.5 答:可能序列有14种:ABCD; ACBD; ACDB; ABDC; ADCB;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1