




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课后习题答案总结第一章第1章作业:1.1,1.2,1.6(1)(3)1.8简述下列概念:数据、数据元素、数据类型、数据结构、逻辑结构、存储结构、线性结构、非线性结构。数据:指能够被计算机识别、存储和加工处理的信息载体。数据元素:就是数据的基本单位,在某些情况下,数据元素也称为元素、结点、顶点、记录。数据元素有时可以由若干数据项组成。数据类型:是一个值的集合以及在这些值上定义的一组操作的总称。通常数据类型可以看作是程序设计语言中已实现的数据结构。数据结构:指的是数据之间的相互关系,即数据的组织形式。一般包括三个方面的内容:数据的逻辑结构、存储结构和数据的运算。逻辑结构:指数据元素之间的逻辑关系。存储结构:数据元素及其关系在计算机存储器内的表示,称为数据的存储结构.线性结构:数据逻辑结构中的一类。它的特征是若结构为非空集,则该结构有且只有一个开始结点和一个终端结点,并且所有结点都有且只有一个直接前趋和一个直接后继。线性表就是一个典型的线性结构。栈、队列、串等都是线性结构。非线性结构:数据逻辑结构中的另一大类,它的逻辑特征是一个结点可能有多个直接前趋和直接后继。数组、广义表、树和图等数据结构都是非线性结构。试举一个数据结构的例子、叙述其逻辑结构、存储结构、运算三个方面的内容。答:例如有一张学生体检情况登记表,记录了一个班的学生的身高、体重等各项体检信息。这张登记表中,每个学生的各项体检信息排在一行上。这个表就是一个数据结构。每个记录(有姓名,学号,身高和体重等字段)就是一个结点,对于整个表来说,只有一个开始结点(它的前面无记录)和一个终端结点(它的后面无记录),其他的结点则各有一个也只有一个直接前趋和直接后继(它的前面和后面均有且只有一个记录)。这几个关系就确定了这个表的逻辑结构是线性结构。这个表中的数据如何存储到计算机里,并且如何表示数据元素之间的关系呢?即用一片连续的内存单元来存放这些记录(如用数组表示)还是随机存放各结点数据再用指针进行链接呢?这就是存储结构的问题。在这个表的某种存储结构基础上,可实现对这张表中的记录进行查询,修改,删除等操作。对这个表可以进行哪些操作以及如何实现这些操作就是数据的运算问题了。设n为正整数,利用大"O”记号,将下列程序段的执行时间表示为n的函数。i=1;k=0;while(i<n){k=k+10*i;i++;)分析:i=1;//1k=0;//1while(i<n)//n{k=k+10*i;//n-1i++;//n-1)由以上列出的各语句的频度,可得该程序段的时间消耗:T(n)=1+1+n+(n-1)+(n-1)=3n可表示为T(n)=O(n)(3)i=1;j=0;while(i+j<=n)(if(i>j)j++;elsei++;)分析:通过分析以上程序段,可将i+j看成一个控制循环次数的变量,且每执行一次循环,i+j的值加1。该程序段的主要时间消耗是while循环,而while循环共做了n次,所以该程序段的执行时间为:T(n)=O(n)1.8按增长率由小至大的顺序排列下列各函数:2100,(3/2)n,(2/3)n,nn,n0.5,n!,2n,lgn川吗答:常见的时间复杂度按数量级递增排列,依次为:常数阶0(1)、对数阶0(log2n)、线性阶0(n)、线性对数阶0(nlog2n)、平方阶0(m)、立方阶0(m)、k次方阶0(曲、指数阶0(2n)。先将题中的函数分成如下几类:常数阶:2100对数阶:lgnK次方阶:n0.5、n(3/2)指数阶(按指数由小到大排):n.、(3/2)n、2n、n!、nn注意:(2/3)、由于底数小于1,所以是一个递减函数,其数量级应小于常数阶。根据以上分析按增长率由小至大的顺序可排列如下:(2/3)n<2100<lgn<n0.5<e<—<(3/2)n<2n<n!<n第二章第二章作业:2.2,2.6,2.9,2.132.2何时选用顺序表、何时选用链表作为线性表的存储结构为宜?答:在实际应用中,应根据具体问题的要求和性质来选择顺序表或链表作为线性表的存储结构,通常有以下几方面的考虑:.基于空间的考虑。当要求存储的线性表长度变化不大,易于事先确定其大小时,为了节约存储空间,宜采用顺序表;反之,当线性表长度变化大,难以估计其存储规模时,采用动态链表作为存储结构为好。.基于时间的考虑。若线性表的操作主要是进行查找,很少做插入和删除操作时,采用顺序表做存储结构为宜;反之,若需要对线性表进行频繁地插入或删除等的操作时,宜采用链表做存储结构。并且若链表的插入和删除主要发生在表的首尾两端,则采用尾指针表示的单循环链表为宜。.6下述算法的功能是什么?LinkListDemo(LinkListL){//L是无头结点单链表ListNode*Q,*P;if(L&&L->next){Q=L;L=L->next;P=L;while(P->next)P=P->next;P->next=Q;Q->next=NULL;)returnL;}//Demo答:该算法的功能是:将开始结点摘下链接到终端结点之后成为新的终端结点,而原来的第二个结点成为新的开始结点,返回新链表的头指针。.9设顺序表L是一个递增有序表,试写一算法,将x插入1中,并使L仍是一个有序表。答:因已知顺序表L是递增有序表,所以只要从顺序表终端结点(设为1位置元素)开始向前寻找到第一个小于或等于x的元素位置i后插入该位置即可。在寻找过程中,由于大于x的元素都应放在x之后,所以可边寻找,边后移元素,当找到第一个小于或等于x的元素位置i时,该位置也空出来了。算法如下:〃顺序表存储结构如题2.7voidInsertIncreaseList(Seqlist*L,Datatypex)(inti;if(L->length>=ListSize)Error("overflow");for(i=L->length;i>0&&L->data[i-1]>x;i--)L->data[i]=L->data[i];//比较并移动元素L->data[i]=x;L->length++;)2.13设A和B是两个单链表,其表中元素递增有序。试写一算法将A和B归并成一个按元素值递减有序的单链表C,并要求辅助空间为0(1),请分析算法的时间复杂度。解:根据已知条件,A和B是两个递增有序表,所以可以先取A表的表头建立空的C表。然后同时扫描A表和B表,将两表中最大的结点从对应表中摘下,并作为开始结点插入C表中。如此反复,直到A表或B表为空。最后将不为空的A表或B表中的结点依次摘下并作为开始结点插入C表中。这时,得到的C表就是由A表和B表归并成的一个按元素值递减有序的单链表C。并且辅助空间为0(1)。算法如下:LinkListMergeSort(LinkListA,LinkListB){//归并两个带头结点的递增有序表为一个带头结点递减有序表ListNode*pa,*pb,*q,*C;pa=A->next;//pa指向A表开始结点C=A;C->next=NULL;//取A表的表头建立空的C表pb=B->next;//pb指向B表开始结点free(B);//回收B表的头结点空间while(pa&&pb){if(pb->data<=pa->data){//当B中的元素小于等于A中当前元素时,将pa表的开始结点摘下q=pa;pa=pa->next;)else{//当B中的元素大于A中当前元素时,将pb表的开始结点摘下q=pb;pb=pb->next;}q->next=C->next;C->next=q;//将摘下的结点q作为开始结点插入C表}〃若pa表非空,则处理pa表while(pa){q=pa;pa=pa->next;q->next=C->next;C->next=q;}〃若pb表非空,则处理pb表while(pb){q=pb;pa=pb->next;q->next=C->next;C->next=q;}return(C);)该算法的时间复杂度分析如下:算法中有三个while循环,其中第二个和第三个循环只执行一个。每个循环做的工作都是对链表中结点扫描处理。整个算法完成后A表和B表中的每个结点都被处理了一遍。所以若A表和B表的表长分别是m和n,则该算法的时间复杂度O(m+n)练习2.1:写出在线性表中的查找运算算法。•即查找数据元素x在表中的位置,也就是数据元素下标值加1。例如:若L.data[i]=x,则返回i+1;若不存在,则返回n+1练习2.2:编写尾插法建立链表的算法。练习2.3:若是带头指针的单链表,算法又是怎样?若是两个链表,既知道头结点,又知道尾结点,算法又是怎样?练习2:按升序打印带头结点h的单链表中各节点的数•据域值,并将打印完的节点从表中删除。第三章第三章作业:3.2,3.3,3.4(2),3.6,3.11循环队列的优点是什么?如何判别它的空和满?答:循环队列的优点是:它可以克服顺序队列断假上溢"现象,能够使存储队列的向量空间得到充分的利用。判别循环队列的"空"或"满〃不能以头尾指针是否相等来确定,一般是通过以下几种方法:一是另设一布尔变量来区别队列的空和满。二是少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。三是设置一计数器记录队列中元素总数,不仅可判别空或满,还可以得到队列中元素的个数。设长度为n的链队用单循环链表表示,若设头指针,则入队出队操作的时间为何?若只设尾指针呢?答:当只设头指针时,出队的时间为1,而入队的时间需要n,因为每次入队均需从头指针开始查找,找到最后一个元素时方可进行入队操作。若只设尾指针,则出入队时间均为1。因为是循环链表,尾指针所指的下一个元素就是头指针所指元素,所以出队时不需要遍历整个队列。指出下述程序段的功能是什么?(2)SeqStackS1,S2,tmp;DataTypex;..•//假设栈tmp和S2已做过初始化while(!StackEmpty(&S1)){x=Pop(&S1);Push(&tmp,x);}while(!StackEmpty(&tmp)){x=Pop(&tmp);Push(&S1,x);Push(&S2,x);}(2)程序段的功能是利用tmp栈将一个非空栈si的所有元素按原样复制到一个栈s2当中去。3.6利用栈的基本操作,写一个将栈S中所有结点均删去的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 系统集成考试经验分享试题及答案
- 初中笔试试题分析及答案
- 复习成果中级社会工作者试题及答案
- 生产分包商管理制度
- 光伏采购管理制度
- 杀虫公司客服管理制度
- 医药公司配送员管理制度
- 产品准入管理制度
- 监理公司总工办管理制度
- 护理服务安全管理制度
- 2025届河南省青桐鸣5月全真模拟卷·高考考前适应性考试-生物试题(含答案)
- 办公软件MS Office应用试题及答案
- 人员结构分析总结模版
- 农村三资管理
- 2025年“铸牢中华民族共同体意识”知识竞赛题库及答案
- 2024年湖南出版中南传媒招聘笔试真题
- 合肥市2025届高三年级5月教学质量检测(合肥三模)生物试题+答案
- 建筑节能材料试题及答案
- 7 什么比猎豹的速度更快 第二课时 课件
- 青马工程笔试试题及答案
- 重大活动保供电工作流程
评论
0/150
提交评论