数据结构熊回香习题答案(全)

上传人:第*** 文档编号:61293132 上传时间:2018-11-28 格式:PDF 页数:90 大小:2.32MB
返回 下载 相关 举报
数据结构熊回香习题答案(全)_第1页
第1页 / 共90页
数据结构熊回香习题答案(全)_第2页
第2页 / 共90页
数据结构熊回香习题答案(全)_第3页
第3页 / 共90页
数据结构熊回香习题答案(全)_第4页
第4页 / 共90页
数据结构熊回香习题答案(全)_第5页
第5页 / 共90页
点击查看更多>>
资源描述

《数据结构熊回香习题答案(全)》由会员分享,可在线阅读,更多相关《数据结构熊回香习题答案(全)(90页珍藏版)》请在金锄头文库上搜索。

1、习题一 习题一 一、选择题 一、选择题 1B 2C 3B 4D 5C 6D 7A 8C 二、填空题 二、填空题 1数据元素 数据元素间关系 2. 数据的组织形式,即数据元素之间逻辑关系的总体 3有穷性 确定性 可行性 4算法的时间复杂度和空间复杂度 5集合 线性结构 树形结构 图状结构或网状结构 三、简述题 三、简述题 1解答: 四种表示方法。 顺序存储方式。数据元素顺序存放,每个存储结点只含一个元素。存储位置反映数据 元素间的逻辑关系。存储密度大,但有些操作(如插入、删除)效率较差。 链式存储方式。每个存储结点除包含数据元素信息外还包含一组(至少一个)指针。 指针反映数据元素间的逻辑关系。这

2、种方式不要求存储空间连续,便于动态操作(如插入、 删除等) ,但存储空间开销大(用于指针) ,另外不能折半查找等。 索引存储方式。除数据元素存储在一地址连续的内存空间外,尚需建立一个索引表, 索引表中索引指示存储结点的存储位置(下标)或存储区间端点(下标) ,兼有静态和动态 特性。 散列存储方式。 通过散列函数和解决冲突的方法, 将关键字散列在连续的有限的地址 空间内, 并将散列函数的值解释成关键字所在元素的存储地址, 这种存储方式称为散列存储。 其特点是存取速度快,只能按关键字随机存取,不能顺序存取,也不能折半存取。 2解答: 数据类型是程序设计语言中的一个概念,它是一个值的集合和操作的集合

3、。如 C 语言 中的整型、实型、字符型等,如整数的取值范围与具体机器和编译系统有关,其操作有加、 减、乘、除、求余等。实际上数据类型是厂家提供给用户的已实现了的数据结构。 “抽象数 据类型(ADT) ”指一个数学模型及定义在该模型上的一组操作。 “抽象”的意义在于数据 类型的数学抽象特性。 抽象数据类型的定义仅取决于它的逻辑特性, 而与其在计算机内部如 何表示和实现无关。 无论其内部结构如何变化, 只要它的数学特性不变就不影响它的外部使 用。抽象数据类型和数据类型实质上是一个概念。此外,抽象数据类型的范围更广,它已不 再局限于机器已定义和实现的数据类型, 还包括用户在设计软件系统时自行定义的数

4、据类型。 使用抽象数据类型定义的软件模块含定义、 表示和实现三部分, 封装在一起, 对用户透明 (提 供接口) , 而不必了解实现细节。 抽象数据类型的出现使程序设计不再是 “艺术” , 而是向 “科 学”迈进了一步。 3解答: 评价好的算法有四个方面。 一是算法的正确性; 二是算法的易读性; 三是算法的健壮性; 四是算法的时空效率(运行) 。 4解答: 逻辑结构、存储结构、操作(运算) 。 5解答: 通常考虑算法所需要的存储空间量和算法所需要的时间量。 后者又涉及到四方面: 程序 运行时所需输入的数据总量, 对源程序进行编译所需时间, 计算机执行每条指令所需时间和 程序中指令重复执行的次数。

5、 6解答: 栈和队列的逻辑结构相同,其存储表示也可相同(顺序存储和链式存储) ,但由于其运 算集合不同而成为不同的数据结构。 7解答: 线性表中的插入、删除操作,在顺序存储方式下平均移动近一半的元素,时间复杂度为 O(n);而在链式存储方式下,插入和删除时间复杂度都是 O(1)。 8解答: 对算法 A1 和 A2 的时间复杂度 T1 和 T2 取对数,得 nlog22 和 2log2n。显然,算法 A2 好 于 A1。 9解答: 语句执行的次数为 n-2 次,T(n)= O(n)。 语句执行的次数为 n-1 次,T(n)= O(n)。 语句执行的次数为 n 次,T(n)= O(n)。 语句执行

6、的次数为 n 1/2次,T(n)= O(n1/2)。 语句执行的次数为(n(n-1)(n-2)/6 次,T(n)= O(n 3)。 习题二 习题二 一、选择题 一、选择题 1 C 2 C 3 A 4 C 5 B 6 D 7 A 8 A 9 B 10 A 二、填空题 二、填空题 1. 不管单链表是否为空表,头指针均不空,并使得对单链表的操作在各种情况下统一 2. 4 2 3. 随机 随机存取 4. O(n) O(n) 5. 相同 6. O(1) O(n) 7. 不同 8. 物理存储位置 链指针 9. O(1) O(n) 10.L-next=L if(L.length=L.listsize) /

7、当前存储空间已满,增补空间 L.elem=(ElemType)realloc(L.elem,(L.listsize+L.incrementsize)*sizeof(ElemType); if(!L.elem) return false; / 存储分配失败 L.listsize+=L.incrementsize; / 当前存储容量增加 for(i=L.length-1;i=0i-) if(L.elemi=0) for(k=i;knext; head-next=NULL; while(p) q=p; p=p-next; q-next=head-next; head-next=q; 6算法描述如下:

8、 void LinListSort(LinkList p=head-next; head-next=NULL; while(p) curr=head-next; pre=head; while(curr curr=curr-next; q=p; p=p-next; q-next=pre-next; pre-next=q; 7算法描述如下: bool NListInsert_L( LinkList int j; p=head; j=1; while(p-next j+; / 寻找第 i-1 个结点,并让 p 指向此结点 if(j!=i-1 / i 的位置不合理 if(s=(LNode *)mal

9、loc(sizeof(LNode)=NULL) exit(1); / 存储分配失败 s-data=e; if(i=1) / 插入在表头 s-next=head; head=s; else s-next=p-next; p-next=s; / 插入新结点 return true; bool NListDelete_L( LinkList int j; p=head; j=1; while(p-next j+; / 寻找第 i-1 个结点,并让 p 指向此结点 if(j!=i-1 / i 的位置不合理 if(i=1) / 删除表头结点 q=p; head=head-next; else q=p-n

10、ext; / q 指向其后继 p-next=q-next; / 删除 q 所指结点 e=q-data; free(q); return true; 8算法描述如下: typedef struct DuNode ElemType data; struct DuNode *prior; struct DuNode *next; DuLNode,*DuLinkList; int ListLength_DuL(DuLinkList int num=0; while(p!=L) num+; p=p-next; return num; bool ListGet_DuL(DuLinkList int j;

11、p=L-next; j=1; while(p-next!=L j+; / 寻找第 i 个结点,并让 p 指向此结点 if(j!=i) return false; / i 的位置不合理 e=p-data; / 被取元素的值赋给 e return true; 9算法描述如下: bool IsSubSet(LinkList La, LinkList Lb) bool ok1,ok2; LinkList p1,p2; ok1=true; p1=La-next; while(ok1 p2=Lb-next; while(!ok2 else p2=p2-next; ok1=ok2; p1=p1-next;

12、return ok1; 10算法描述如下: void merge_L(LinkList La, LinkList Lb, LinkList Lc=La; pa=La-next; Lc-next=NULL; pb=Lb-next; free(Lb); while(pa pa=pa-next; qa-next=Lc-next; Lc-next=qa; else if(pa-datapb-data) qb=pb; pb=pb-next; qb-next=Lc-next; Lc-next=qb; else qa=pa; qb=pb; pa=pa-next; pb=pb-next; qa-next=Lc

13、-next; Lc-next=qa; free(qb); while(pa) qa=pa; pa=pa-next; qa-next=Lc-next; Lc-next=qa; while(pb) qb=pb; pb=pb-next; qb-next=Lc-next; Lc-next=qb; 11算法描述如下: void Interaction(LinkList ha,LinkList hb,LinkList LinListSort(ha); LinListSort(hb); /调用第 6 题的排序函数 pa=ha-next; pb=hb-next; hc=(LinkList)malloc(siz

14、eof(LNode); hc-next=NULL; while(pa else if(pa-datapb-data) pb=pb-next; else pc=(LinkList)malloc(sizeof(LNode); pc-data=pa-data; pc-next=hc-next; hc-next=pc; pa=pa-next; pb=pb-next; 12算法描述如下: void Decompose(LinkList L,LinkList p=L; ha=(LNode *)malloc(sizeof(LNode); hb=(LNode *)malloc(sizeof(LNode); h

15、c=(LNode *)malloc(sizeof(LNode); ha-next=ha; hb-next=hb; hc-next=hc; while(p) if(Adata q-next=ha-next; ha-next=q; else if(0data q-next=hb-next; hb-next=q; else q=p; p=p-next; q-next=hc-next; hc-next=q; 13算法描述如下: void Delete_L(LinkList L) / 删除带头结点的单链表 L 中值相同的多余结点 LinkList p,q,s; p=L-next; while(p-next while(q-next) if(p-data=q-next-data) s=q-next; q-next=s-next; free(s); else q=q-next; p=p-next; 14算法描述如下: int CountNode(LinkList he

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 事务文书

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号