Ch2习题参考答案_第1页
Ch2习题参考答案_第2页
Ch2习题参考答案_第3页
Ch2习题参考答案_第4页
Ch2习题参考答案_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章习题参照答案一、判断题1.线性表的逻辑次序与存储次序总是一致的。(ERROR)2.次序存储的线性表可以按序号随机存取。(OK)3.次序表的插入和删除一种数据元素,由于每次操作平均只有近二分之一的元素需要移动。(OK)4.线性表中的元素可以是多种各样的,但同一线性表中的数据元素具有相似的特性,因此是属于同一数据对象。(OK)5.在线性表的次序存储构造中,逻辑上相邻的两个元素在物理位置上并不一定紧邻。(ERROR)6.在线性表的链式存储构造中,逻辑上相邻的元素在物理位置上不一定相邻。(OK)7.线性表的链式存储构造优于次序存储构造。(ERROR)8.在线性表的次序存储构造中,插入和删除时,移动元素的个数与该元素的位置有关。(OK)9.线性表的链式存储构造是用一组任意的存储单元来存储线性表中数据元素的。(OK)10.在单链表中,要获得某个元素,只要懂得该元素的指针即可,因此,单链表是随机存取的存储构造。(ERROR)二、单项选择题、(请从下列A,B,C,D选项中选择一项)11.线性表是(A)。(A)一种有限序列,可认为空;(B)一种有限序列,不能为空;(C)一种无限序列,可认为空;(D)一种无序序列,不能为空。12.对次序存储的线性表,设其长度为n,在任何位置上插入或删除操作都是等概率的。插入一种元素时平均要移动表中的(A)个元素。(A)n/2(B)(n+1)/2(C)(n–1)/2(D)n13.线性表采用链式存储时,其地址(D)。(A)必须是持续的;(B)部分地址必须是持续的;(C)一定是不持续的;(D)持续与否均可以。14.用链表表达线性表的长处是(C)。(A)便于随机存取(B)花费的存储空间较次序存储少(C)便于插入和删除(D)数据元素的物理次序与逻辑次序相似15.某链表中最常用的操作是在最终一种元素之后插入一种元素和删除最终一种元素,则采用(D)存储方式最节省运算时间。(A)单链表(B)双链表(C)单循环链表(D)带头结点的双循环链表16.循环链表的重要长处是(D)。(A)不再需要头指针了(B)已知某个结点的位置后,可以轻易找到他的直接前趋(C)在进行插入、删除运算时,能更好的保证链表不停开(D)从表中的任意结点出发都能扫描到整个链表17.下面有关线性表的论述错误的是(B)。线性表采用次序存储,必须占用一片地址持续的单元;线性表采用次序存储,便于进行插入和删除操作;线性表采用链式存储,不必占用一片地址持续的单元;线性表采用链式存储,便于进行插入和删除操作;18.单链表中,增长一种头结点的目的是为了(C)。(A)使单链表至少有一种结点(B)标识表结点中首结点的位置(C)以便运算的实现(D)阐明单链表是线性表的链式存储19.若某线性表中最常用的操作是在最终一种元素之后插入一种元素和删除第一种元素,则采用(D)存储方式最节省运算时间。(A)单链表(B)仅有头指针的单循环链表(C)双链表(D)仅有尾指针的单循环链表20.若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省运算时间(B)。(A)单链表(B)次序表(C)双链表(D)单循环链表21.一种向量(一种次序表)第一种元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是_______。A.110B.108C.100D.120答:B[第5个元素的地址=100+2*(5-1)=108]22.不带头结点的单链表head为空的鉴定条件是______。A.head==NULL;B.head->next==NULL;C.head->next==head;D.head!=NULL;答:A23.带头结点的单链表head为空的鉴定条件是______。A.head==NULL;B.head->next==NULL;C.head->next==head;D.head!=NULL;答:B24.在循环双链表的p所指结点之后插入s所指结点的操作是_____。A.p->right=s;s->left=p;p->right->left=s;s=->right=p->right;B.p->right=s;p->right->left=s;s->left=p;s->right=p->right;C.s->left=p;s->right=p->right;p->right=s;p->right->left=s;D.s->left=p;s->right=p->right;p->right->left=s;p->right=s;答:D25.在一种单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行______。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->next=s;s->next=q;答:C26.从一种具有n个结点的单链表中查找其值等于x结点时,在查找成功的状况下,需平均比较_____个结点。(参见网上讲义:1.4.2例1_5)A.n;B.n/2;C.(n-1)/2;D.(n+1)/2;答:D27.给定有n个结点的向量,建立一种有序单链表的时间复杂度_______。A.O(1);B.O(n);C.O(n);D.O(nlogn);答:C三、填空题28.在一种长度为n的向量中的第i个元素(1≤i≤n)之前插入一种元素时,需向后移动_____个元素。答:n-i+129.在一种长度为n的向量中删除第i个元素(1≤i≤n)时,需向前移动_____个元素。答:n-i30.在一种单链表中p所指结点之前插入一种由指针s所指结点,可执行如下操作:s->next=__p->next_____;p->next=s;t=p->data;p->data=___s->data________;s->data=___t________;四、算法设计题:31.有一种单链表(不一样结点的数据域值也许相似),其头指针为head,编写一种函数计算数据域为x的结点个数。解:本题是遍历通过该链表的每个结点,每碰到一种结点,结点个数加1,结点个数存储在变量n中。实现本题功能的函数如下:intcount(head,x)node*head;ElemTypex;{/*本题中head为链头指针,不含头结点*/node*p;intn=0;p=head;while(p!=NULL){if(p->data==x)n++;p=p->next;}return(n);}32.有一种有序单链表(从小到大排序),表头指针为head,编写一种函数向该单链表中插入一种元素为x的结点,使插入后该链表仍然有序。解:本题算法的思想是先建立一种待插入的结点,然后依次与链表中的各结点的数据域比较大小,找出该结点的位置,最终插入该结点。实现本题功能的函数如下:node*insertorder(head,x)node*head;ElemTypex;{/*本题中head为链头指针,不含头结点*/node*s,*p,*q;s=(node*)malloc(sizeof(node));/*建立一种待插入的结点*/s->data=x;s->next=NULL;if(head==NULL‖x<head->data)/*若单链表为空或x不不小于第一种结点的data域*/{s->next=head;/*则把s结点插入到表头背面*/head=s;}else{q=head;/*为s结点寻找插入位置,p指向待比较的结点,q指向p的前驱结点*/p=q->next;while(p!=NULL&&x>p->data)/*若x不不小于p所指向的data域值*/if(x>p->data){q=p;p=p->next;}s->next=p;/*将s结点插入到q和p之间*/q->next=s;}return(head);}33.编写一种函数将一种头指针为a的单链表A分解成两个单链表A和B,其头指针分别为a和b,使得A链表中具有原链表A中序号为奇数的元素,而B链表中具有原链表A中序号为偶数的元素,且保持本来的相对次序。解:其函数是将单链表A中的所有偶数序号的结点删除,并在删除时把这些结点链接起来构成单链表B。实现本题功能的函数如下:voiddisa(a,b)node*a,*b;{/*本题中a、b为链头指针,不含头结点*/node*r,*p,*q;p=a;b=a->next;r=b;while(p!=NULL&&p->next!=NULL){q=p->next;/*q指向偶数序号的结点*/p->next=q->next;/*将q从原A中删除掉*/r->next=q;/*将q结点链接到B链表的末尾*/r=q/*r总是指向B链表的最终一种结点*/p=p->next;/*p指向原链表A中的奇数序号的结点*/}r->next=NULL;/*将生成B链表中的最终一种结点的next域置空*/}34.假设有两个已排序的单链表A和B,编写一种函数将它们合并成一种链表C而不变化其排序性。解:这里采用链表合并的措施,设原两链表的头指针分别为p和q,每次比较p->data和q->data的值,把值较小的结点作为新链表的结点,这一过程直到一种链表为空为止。当一种链表为空而另一种链表不为空时,只要将不空的链表指针赋给新链表中最终一种结点的指针即可。实现本题功能的函数如下:node*mergelink(p,q)node*p,*q;{/*本题中p、q为链头指针,不含头结点。*//*但为操作以便,过程中要为链表C建立一种临时头结点。*/node*h,*r;h=(node*)malloc(sizeof(node));/*建立头结点*/h->next=NULL;r=h;while(p!=NULL&&q!=NULL)if(p->data<=q->data){r->next=p;r=p;p=p->next;}else{r->next=q;r=q;q=q->next;}if(p==NULL)/*若A链表的结点已取完,则把B的所有余下的结点链接C中*/r->next=q;if(q==NULL)/*若A链表的结点已取完,则把B的所有余下的结点链接C中*/r->next=p;/*下面三句要去掉链表C的头结点,假如不想去掉,则不要这三句*/p=h->next;h=h->next;free(p);returnh;}35.设A=(a,…,a)和B=(b,…,bn)均为次序表,A’和B’分别为A和B中除去最大共同前缀后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),则两者中最大的共同前缀为(x,y,y,z),在A’=B’=空表,则A=B;若A’=空表,而B’<>空表,或者两者均不为空表,且A’的首元不不小于B’的首元,则A<B;否则A>B。(词典次序)试写一种比较A,B大小的算法(在算法中,不要破坏原表A和B,并且不一定先求得A’和B’才进行比较)。36.设有一种用向量表达的线性表L,规定写出一种将该表逆置的过程,并容许在原表的存储空间外再增长一种附加的工作单元。(朱儒荣,C语言版数据构造考研例题)解:用数据类型描述Seqlist次序存储构造:voldconverts(seqlistL){k=L.length;m=k/2;for(i=0;i<m;i++){x=L.element[i];L.element[i]=L.element[k-i-1];L.element[k-i-1]=x;}}//converts讨论:这个算法过程只须进行数据元素的互换操作,其重要时间花费在for循环上,整个算法的时间复杂度为O(k)。37.已知两个整数集合A和B,它们的元素分别依元素值递增有序寄存在两个单链表HA和HB中,编写一种函数求出这两个集合的并集C,并规定集合C的链表的结点仍依元素值递增有序寄存。(提醒:求并集不是归并!)38.已知两个次序表A和B分别表达两个集合,其元素递增排列,编写一种函数求出A和B的交集C,规定C同样以元素递增的次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论