数据结构1-2章习题课答案.ppt

上传人:本田雅阁 文档编号:3484417 上传时间:2019-09-02 格式:PPT 页数:25 大小:109.55KB
返回 下载 相关 举报
数据结构1-2章习题课答案.ppt_第1页
第1页 / 共25页
数据结构1-2章习题课答案.ppt_第2页
第2页 / 共25页
数据结构1-2章习题课答案.ppt_第3页
第3页 / 共25页
数据结构1-2章习题课答案.ppt_第4页
第4页 / 共25页
数据结构1-2章习题课答案.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数据结构1-2章习题课答案.ppt》由会员分享,可在线阅读,更多相关《数据结构1-2章习题课答案.ppt(25页珍藏版)》请在三一文库上搜索。

1、1,习 题 课 (12章),2,一、填空题 数据的逻辑结构被分为 、 、 和 4种. 数据的存储结构被分为 、 2种. 在线性结构、树形结构和图形结构中,直接前驱和 直接后继结点之间分别存在着 、 和 的联系。 4. 一个算法应具有 、 、 输 入和输出特性. 5. 一个算法的效率主要由 和 来度量。 6. 抽象数据类型包括_和_。,3,在顺序表中插入一个元素,需要平均移动 元素,具体移动的元素个数与 有关。 8. 在顺序表中逻辑上相邻的元素的物理位置 紧邻。 单链表中逻辑上相邻的元素的物理位置 紧邻。 9. 在单链表中,除了首元结点外,任一结点的存储位 置由 指示。 10. 在单链表中设置头

2、结点的作用是 。,4,从一维数组An中顺序找出一个最大值元素的时间复杂度 为 ,输出一个二维数组Bmn中所有元素值的时 间复杂度为 .,15. 在下面的程序中,s=s+p语句的执行次数为 , p*=j语句的执行次数为 , 该程序段的时间复杂度为 . int i=0; s=0; while(+i=n) int p=1; for(int j=1; j=i; j+ ) p*=j; s=s+p; ,5,16. 一维数组逻辑结构是 ,存储结构是 . 对于二维数组有 和 两种不同的存储方式. 对于一个二维数组Amn,若采用行优先顺序存储的 方式, 则任一数组元素Aij相对于A00的地址为 .,6,补充题:

3、 按增长率由小到大的顺序排列下列各函数: 2100,(3/2)n,(2/3)n,(4/3)n,nn,n2/3, n1/2, n!,n,log2n,n/log2n,log22n,log2(log2n), nlog2n,nlog2n,7,补充题答案: 答:按增长率由小到大的顺序各函数为: (2/3)n, 2100, log2(log2n) , log2n, log22n, n1/2 , n2/3, n/log2n, n,nlog2n, (4/3)n, (3/2)n, n!, nn,8,二、已知L是无表头结点的单链表,且P结点既不是首 元结点,也不是尾结点,试从下列提供的答案中选 择合适的语句序列。

4、,在P结点后插入S结点的语句序列是 。 在P结点前插入S结点的语句序列是 。 在表首插入S结点的语句序列是 。 在表尾插入S结点的语句序列是 。 P-next=S; (2) p-next=p-next-next; P-next= S-next; (4) S-next =P-next; S-next=L; (6) S-next=NULL; Q=P; while(P-next!=Q) P= P-next; while(P-next!=NULL) P= P-next; P=Q; (11) P=L; (12) L=S; (13) L=P;,9,四、设有一个10*10的对称矩阵A1010,采取按行压缩存

5、储的方式存放于一个一维数组B 中,则数组B 的容量应有多大?若设A00为第一个元素,存放于B0,且数组A 的每一个数组元素在数组B 中占一个数组元素位置,则A85在数组B 中地址是多少?,答案: 数组B应有55个元素,对于下三角矩阵, LOC(A85)=1+8+5=41 对于上三角矩阵, LOC(A85)= LOC(A58)=10+9+8+7+6+(8-5)=43,10,五、(1)画出执行下列各行语句后各指针及链表的示意图。 Node *L=new Node( ); P=L; for(i=1; inext=Q; P=P-next; P-data=2*i-1; P-next=NULL; for(

6、i=4; i=1; i-) Insert(2*i, i+1); for(i=1; i=3; i+) Delete(i); ,11,六、简述以下算法的功能。 (1)void A(next L ) /L是无表头结点的单链表 if(L ,12,(2) void BB(ListNode *s; ListNode *q) p=s; while(p-next!=q) p-p-next; p-next=s; void AA (ListNode *pa; ListNode *pb) BB(pa,pb); /pa和pb分别指向单循环链表中的两个结点。 BB(pb,pa); ,13,数据结构: 所研究内容的着重点

7、主要体现在三个方面: 第一是数据间的逻辑关系,即数据元素之间的关系。 第二是数据的存储关系,即数据在计算机中的存储结构。 第三是算法,即定义在逻辑关系上的一组操作。 因此,简单说来,数据结构所研究的问题是如何将现实世界中的事物合理描述为计算机世界中所研究的对象,并根据研究对象的特点,分析对象之间的关系、存储结构和操作的学科。,试说明基本数据类型、数据结构和抽象数据类型的联系与差异。,基本数据类型(Data Type): 在程序设计高级语言中,数据类型用来说明一个数据在数据分类中的归属。它是数据的一种属性。这个属性限定了该数据的变化范围。高级语言中都有基本数据类型。例如在C、C+和Java语言中

8、,有基本类型int(整型)、float(浮点型)和char(字符型),有构造类型数组、结构、联合、指针、枚举型和自定义等。数据类型仅局限于计算机中定义并实现了的数据类型;,14,抽象数据类型: 是指一个数学模型以及定义在该模型上的一组操作。抽象数据类型的定义仅取决于抽象数据类型的逻辑特性,与它在计算机内部如何表示和实现无关。即不论其内部结构如何变化,只要数学特性不变,都不影响抽象数据类型外部的使用。 抽象数据类型除了计算机中定义并实现了的数据类型;还包括用户在设计软件系统时自己定义的数据类型。,15,1-5 试说明数据的逻辑结构、存储结构和算法三者之间的关系。,1个数据逻辑结构可有多种不同的存

9、储结构;存储结构是对逻辑结构实现;算法是基于逻辑结构对操作的实现;函数是基于存储结构对算法的实现,是程序;,答:数据的逻辑结构、存储结构和算法是数据结构所讨论的三个 方面。,16,1-6 请给出下列函数的大O和表示:,O(n1/2logn),O(n),O(n1.5),O(n1/2),17,2-1描述以下三个概念的区别:头指针、头结点、首结点(第一个元素结点)。在单链表中设置头结点的作用是什么?,答:首结点就是存放数据元素的第一个元素结点,头结点是为了插入和删除的方便说增设的一个结点,头指针是指向链表中第一个结点的存储位置,在没有头结点的链表中,头指针指向链表中的首结点,在有头结点的链表中,头指

10、针指向链表中的头结点。,习 题 2(p55),18,2-4 已知二维数组Am,m采用按行优先顺序存放,每个元素占K个存储单元,并且第一个元素的存储地址为Loc(a00),请写出求Loc(aij)的计算公式。如果采用列优先顺序存放呢?,答:行优先顺序存放时: Loc(aij)= Loc(a00) +(i*m+j)*K 列优先顺序存放时: Loc(aij)= Loc(a00) +(j*m+i)*K,19,2-5 在链表类的实现中增加一个成员函数实现对表中元素置逆的操作(设原链表为 a0, a1, , an-2, an-1;则置逆后的序列为 an-1, an-2, ,a1, a0)。对于有n个元素的

11、线性表,你的算法的运行时间应为O(n)。 void LinkList: Inverse( ) if (head-next=NULL) return; p=head-next; head-next=NULL; while(p!=NULL) q=p-next; p-next=head-next; head-next=p; p=q; ,20,2-10 设计一个算法,将数组A(0n-1)中的元素循环右移k位,假设原数组序列为a0, a1, , an-2, an-1;移动后的序列为 an-k, an-k+1, , a0, a1, , an-k-1。要求只用一个元素大小的附加存储,元素移动或交换次数为O(

12、n)。,void youyi (int a,int n,int k) int b; for(int i=0;i=0;j-) aj+1=aj; a0=b; ,21,补充题 1. 数组置逆 void inverse(DataType A , int n) for(i=0;in/2;i+) temp=Ai; Ai=An-1-i; An-1-i=temp; ,22,2: 求鞍点:二维数组中行最小,列最大的元素 void minmax(int A , int m, int n) for(i=0; irow) tag=0; else h+; if (tag) couti“ ”j“ ”rowendl; ,2

13、3,练习题: 3. 设数组An中有多个零元素,是写一函数,将A中 所有非零元素依次移动数组A的前端。 4. 设计一个算法,找单链表中值最大的结点。,24,3:设数组An中有多个零元素,是写一函数,将A中所有非零元素依次移动数组A的前端。,void compact(int A,int n) k=0; for(i=0; in; i+) if (Ai!=0) if(i!=k) Ak= Ai; k+; for(i=k; in; i+) Ai=0; ,25,int Max(List head ) if(!head-next) return -1; maxvalue=-9999; p=head-next; while(p) if(p-datamaxvalue) maxvalue=p-data; p=p-next; return maxvalue; ,4. 设计一个算法,找单链表中值最大的结点。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1