您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 严蔚敏-数据结构课后习题及答案解析
第一章绪论一、选择题1.组成数据的基本单位是()(A)数据项(B)数据类型(C)数据元素(D)数据变量2.数据结构是研究数据的()以及它们之间的相互关系。(A)理想结构,物理结构(B)理想结构,抽象结构(C)物理结构,逻辑结构(D)抽象结构,逻辑结构3.在数据结构中,从逻辑上可以把数据结构分成()(A)动态结构和静态结构(B)紧凑结构和非紧凑结构(C)线性结构和非线性结构(D)内部结构和外部结构4.数据结构是一门研究非数值计算的程序设计问题中计算机的(①)以及它们之间的(②)和运算等的学科。①(A)数据元素(B)计算方法(C)逻辑存储(D)数据映像②(A)结构(B)关系(C)运算(D)算法5.算法分析的目的是()。(A)找出数据结构的合理性(B)研究算法中的输入和输出的关系(C)分析算法的效率以求改进(D)分析算法的易懂性和文档性6.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。①(A)计算方法(B)排序方法(C)解决问题的有限运算序列(D)调度方法②(A)可执行性、可移植性和可扩充性(B)可行性、确定性和有穷性(C)确定性、有穷性和稳定性(D)易读性、稳定性和安全性二、判断题1.数据的机内表示称为数据的存储结构。()2.算法就是程序。()3.数据元素是数据的最小单位。()4.算法的五个特性为:有穷性、输入、输出、完成性和确定性。()5.算法的时间复杂度取决于问题的规模和待处理数据的初态。()三、填空题1.数据逻辑结构包括________、________、_________和_________四种类型,其中树形结构和图形结构合称为_____。2.在线性结构中,第一个结点____前驱结点,其余每个结点有且只有______个前驱结点;最后一个结点______后续结点,其余每个结点有且只有_______个后续结点。3.在树形结构中,树根结点没有_______结点,其余每个结点有且只有_______个前驱结点;叶子结点没有________结点,其余每个结点的后续结点可以_________。4.在图形结构中,每个结点的前驱结点数和后续结点数可以_________。5.线性结构中元素之间存在________关系,树形结构中元素之间存在______关系,图形结构中元素之间存在_______关系。6.算法的五个重要特性是_______、_______、______、_______、_______。7.数据结构的三要素是指______、_______和________。8.链式存储结构与顺序存储结构相比较,主要优点是________________________________。9.设有一批数据元素,为了最快的存储某元素,数据结构宜用_________结构,为了方便插入一个元素,数据结构宜用____________结构。四、算法分析题1.求下列算法段的语句频度及时间复杂度参考答案:一、选择题1.C2.C3.C4.A、B5.C6.C、B二、判断题:1、√2、×3、×4、×5、√三、填空题1、线性、树形、图形、集合?;非线性(网状)2、没有;1;没有;13、前驱;1;后继;任意多个4、任意多个5、一对一;一对多;多对多6、有穷性;确定性;可行性;输入;输出7、数据元素;逻辑结构;存储结构8、插入、删除、合并等操作较方便9、顺序存储;链式存储四、算法分析题for(i=1;i=n;i++)for(j=1;j=i;j++)x=x+1;分析:该算法为一个二重循环,执行次数为内、外循环次数相乘,但内循环次数不固定,与外循环有关,因些,时间频度T(n)=1+2+3+…+n=n*(n+1)/2有1/4≤T(n)/n2≤1,故它的时间复杂度为O(n2),即T(n)与n2数量级相同。2、分析下列算法段的时间频度及时间复杂度for(i=1;i=n;i++)for(j=1;j=i;j++)for(k=1;k=j;k++)x=i+j-k;分析算法规律可知时间频度T(n)=1+(1+2)+(1+2+3)+...+(1+2+3+…+n)由于有1/6≤T(n)/n3≤1,故时间复杂度为O(n3)第二章线性表一、选择题1.一个线性表第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是()(A)110(B)108(C)100(D)1202.向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动()个元素。(A)64(B)63(C)63.5(D)73.线性表采用链式存储结构时,其地址()。(A)必须是连续的(B)部分地址必须是连续的(C)一定是不连续的(D)连续与否均可以4.在一个单链表中,若p所指结点不是最后结点,在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;5.在一个单链表中,若删除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;6.下列有关线性表的叙述中,正确的是()(A)线性表中的元素之间隔是线性关系(B)线性表中至少有一个元素(C)线性表中任何一个元素有且仅有一个直接前趋(D)线性表中任何一个元素有且仅有一个直接后继7.线性表是具有n个()的有限序列(n≠0)(A)表元素(B)字符(C)数据元素(D)数据项二、判断题1.线性表的链接存储,表中元素的逻辑顺序与物理顺序一定相同。()2.如果没有提供指针类型的语言,就无法构造链式结构。()3.线性结构的特点是只有一个结点没有前驱,只有一个结点没有后继,其余的结点只有一个前驱和后继。()4.语句p=p-next完成了指针赋值并使p指针得到了p指针所指后继结点的数据域值。()5.要想删除p指针的后继结点,我们应该执行q=p-next;p-next=q-next;free(q)。()三、填空题1.已知P为单链表中的非首尾结点,在P结点后插入S结点的语句为:_______________________。2.顺序表中逻辑上相邻的元素物理位置()相邻,单链表中逻辑上相邻的元素物理位置_________相邻。3.线性表L=(a1,a2,...,an)采用顺序存储,假定在不同的n+1个位置上插入的概率相同,则插入一个新元素平均需要移动的元素个数是________________________4.在非空双向循环链表中,在结点q的前面插入结点p的过程如下:p-prior=q-prior;q-prior-next=p;p-next=q;______________________;5.已知L是无表头结点的单链表,是从下列提供的答案中选择合适的语句序列,分别实现:(1)表尾插入s结点的语句序列是_______________________________(2)表尾插入s结点的语句序列是_______________________________1.p-next=s;2.p=L;3.L=s;4.p-next=s-next;5.s-next=p-next;6.s-next=L;7.s-next=null;8.while(p-next!=Q)?p=p-next;9.while(p-next!=null)p=p-next;四、算法设计题1.试编写一个求已知单链表的数据域的平均值的函数(数据域数据类型为整型)。2.已知带有头结点的循环链表中头指针为head,试写出删除并释放数据域值为x的所有结点的c函数。3.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现出库(销售)m台价格为h的电视机,试编写算法修改原链表。4.某百货公司仓库中有一批电视机,按其价格从低到高的次序构成一个循环链表,每个结点有价格、数量和链指针三个域。现新到m台价格为h的电视机,试编写算法修改原链表。5.线性表中的元素值按递增有序排列,针对顺序表和循环链表两种不同的存储方式,分别编写C函数删除线性表中值介于a与b(a≤b)之间的元素。6.设A=(a0,a1,a2,...,an-1),B=(b0,b1,b2,...,bm-1)是两个给定的线性表,它们的结点个数分别是n和m,且结点值均是整数。若n=m,且ai=bi(0≤in),则A=B;若nm,且ai=bi(0≤in),则AB;若存在一个j,jm,jn,且ai=bi(0≤ij),若ajbj,则AB,否则AB。试编写一个比较A和B的C函数,该函数返回-1或0或1,分别表示AB或A=B或AB。7.试编写算法,删除双向循环链表中第k个结点。8.线性表由前后两部分性质不同的元素组成(a0,a1,...,an-1,b0,b1,...,bm-1),m和n为两部分元素的个数,若线性表分别采用数组和链表两种方式存储,编写算法将两部分元素换位成(b0,b1,...,bm-1,a0,a1,...,an-1),分析两种存储方式下算法的时间和空间复杂度。9.用循环链表作线性表(a0,a1,...,an-1)和(b0,b1,...,bm-1)的存储结构,头指针分别为ah和bh,设计C函数,把两个线性表合并成形如(a0,b0,a1,b1,…)的线性表,要求不开辟新的动态空间,利用原来循环链表的结点完成合并操作,结构仍为循环链表,头指针为head,并分析算法的时间复杂度。10.试写出将一个线性表分解为两个带有头结点的循环链表,并将两个循环链表的长度放在各自的头结点的数据域中的C函数。其中,线性表中序号为偶数的元素分解到第一个循环链表中,序号为奇数的元素分解到第二个循环链表中。11.试写出把线性链表改为循环链表的C函数。12.己知非空线性链表中x结点的直接前驱结点为y,试写出删除x结点的C函数。参考答案:一、选择题1.B2.C3.D4.B5.A6.A7、C二、判断题:参考答案:1、×2、√3、×4、×5、√三、填空题1、s-next=p-next;p-next=s;2、一定;不一定3、n/24、q-prior=p;5、(1)6)3)(2)2)9)1)7)四、算法设计题1、#includestdio.h#includemalloc.htypedefstructnode{intdata;structnode*link;}NODE;intaver(NODE*head){inti=0,sum=0,ave;NODE*p;p=head;while(p!=NULL){p=p-link;++i;sum=sum+p-data;}ave=sum/i;return(ave);}2、#includestdio.h#includemalloc.htypedefstructnode{intdata;/*假设数据域为整型*/structnode*link;}NODE;voiddel_link(NODE*head,intx)/*删除数据域为x的结点*/{NODE*p,*q,*s;p=head;q=head-link;while(q!=head){if(q-data==x){p-link=q-link;s=q;q=q-link;free(s);}else{p=q;q=q-link;}}}3、voiddel(NODE*head,floatprice,intnum){NODE*p,*q,*s;p=head;q=head-next;while(q-priceprice&&q!=head){p=q;q=q-next;}if(q-price==price)q-num=q-num-num;elseprintf(无此产品);if(q-num==0){p-next=q-next;free(q);}}4、#inclu
本文标题:严蔚敏-数据结构课后习题及答案解析
链接地址:https://www.777doc.com/doc-1905835 .html