第2章++线性表+课后习题答案

上传人:博****1 文档编号:512716509 上传时间:2023-12-30 格式:DOCX 页数:5 大小:34.69KB
返回 下载 相关 举报
第2章++线性表+课后习题答案_第1页
第1页 / 共5页
第2章++线性表+课后习题答案_第2页
第2页 / 共5页
第2章++线性表+课后习题答案_第3页
第3页 / 共5页
第2章++线性表+课后习题答案_第4页
第4页 / 共5页
第2章++线性表+课后习题答案_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《第2章++线性表+课后习题答案》由会员分享,可在线阅读,更多相关《第2章++线性表+课后习题答案(5页珍藏版)》请在金锄头文库上搜索。

1、第2章 线性表1选择题(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。A110 B108 C100 D120(2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。A访问第i个结点(1in)和求第i个结点的直接前驱(2in) B在第i个结点后插入一个新结点(1in)C删除第i个结点(1in)D将n个结点从小到大排序(3) 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 的元素个数为( )。A8 B63.5 C63 D7(4)链接存储的存储结构所占存储空间( )。A分两部分,一部分存放结点值,另一部分存放表示结

2、点间关系的指针B只有一部分,存放结点值C只有一部分,存储表示结点间关系的指针D分两部分,一部分存放结点值,另一部分存放结点所占单元数(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。A必须是连续的 B部分地址必须是连续的C一定是不连续的 D连续或不连续都可以(6)线性表在( )情况下适用于使用链式结构实现。A需经常修改中的结点值 需不断对进行删除插入 C中含有大量的结点 中结点结构复杂(7)单链表的存储密度( )。A大于1 B等于1 C小于1 D不能确定(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( )。An B2n-1 C2n Dn-1(9)在一个

3、长度为n的顺序表中,在第i个元素(1in+1)之前插入一个新元素时须向后移动( )个元素。An-i Bn-i+1 Cn-i-1 Di(10) 线性表L=(a1,a2,an),下列说法正确的是( )。A每个元素都有一个直接前驱和一个直接后继B线性表中至少有一个元素C表中诸元素的排列必须是由小到大或由大到小D除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。(11) 若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( )。AO(1) BO(n) CO(n2) DO(nlog2n)精选文档(12) 以下说法错误的是( )。A求表长、定位这两种运算在采用顺序存

4、储结构时实现的效率不比采用链式存储结构时实现的效率低B顺序存储的线性表可以随机存取C由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活D线性表的链式存储结构优于顺序存储结构(13) 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )。As-next=p+1; p-next=s;B(*p).next=s; (*s).next=(*p).next;Cs-next=p-next; p-next=s-next;Ds-next=p-next; p-next=s; (14) 在双向链表存储结构中,删除p所指的结点时须修改指针( )。Ap-next-prior=p-prior; p-pr

5、ior-next=p-next;Bp-next=p-next-next; p-next-prior=p;Cp-prior-next=p; p-prior=p-prior-prior;Dp-prior=p-next-next; p-next=p-prior-prior;(15) 在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是( )。Ap-next=q; q-prior=p; p-next-prior=q; q-next=q;Bp-next=q; p-next-prior=q; q-prior=p; q-next=p-next;Cq-prior=p; q-next=

6、p-next; p-next-prior=q; p-next=q;Dq-prior=p; q-next=p-next; p-next=q; p-next-prior=q;2算法设计题(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc) pa=La-next; pb=Lb-next; Lc=pc=La; /用La的头结点作为Lc的头结点 while(pa & pb) if(pa-datadat

7、a) pc-next=pa;pc=pa;pa=pa-next; else if(pa-datapb-data) pc-next=pb; pc=pb; pb=pb-next; else / 相等时取La的元素,删除Lb的元素 pc-next=pa;pc=pa;pa=pa-next; q=pb-next;delete pb ;pb =q; pc-next=pa?pa:pb; /插入剩余段 delete Lb; /释放Lb的头结点 (2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。void union(

8、LinkList& La, LinkList& Lb, LinkList& Lc, ) pa = La-next; pb = Lb-next; / 初始化 Lc=pc=La; /用La的头结点作为Lc的头结点 Lc-next = NULL;精选文档 while ( pa | pb ) if ( !pa ) q = pb; pb = pb-next; else if ( !pb ) q = pa; pa = pa-next; else if (pa-data data ) q = pa; pa = pa-next; else q = pb; pb = pb-next; q-next = Lc-n

9、ext; Lc-next = q; / 插入 delete Lb; /释放Lb的头结点 (3)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。void Mix(LinkList& La, LinkList& Lb, LinkList& Lc, ) pa=la-next;pb=lb-next;设工作指针pa和pb;Lc=pc=La; /用La的头结点作为Lc的头结点while(pa&pb) if(pa-data=pb-data)交集并入结果表中。 pc-next=pa;pc=pa;pa=pa-next; u=pb;pb=pb-next; dele

10、te u; else if(pa-datadata) u=pa;pa=pa-next; delete u;else u=pb; pb=pb-next; delete u;while(pa) u=pa; pa=pa-next; delete u; 释放结点空间while(pb) u=pb; pb=pb-next; delete u;释放结点空间pc-next=null;置链表尾标记。delete Lb; 注: 本算法中也可对B表不作释放空间的处理(4)已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以

11、同样的形式存储,同时返回该集合的元素个数。void Difference(LinkedList A,B,*n)A和B均是带头结点的递增有序的单链表,分别存储了一个集合,本算法求两集合的差集,存储于单链表A中,*n是结果集合中元素个数,调用时为0p=A-next; p和q分别是链表A和B的工作指针。 q=B-next; pre=A; pre为A中p所指结点的前驱结点的指针。 while(p!=null & q!=null)if(p-datadata)pre=p;p=p-next;*n+; A链表中当前结点指针后移。else if(p-dataq-data)q=q-next; B链表中当前结点指针

12、后移。else pre-next=p-next; 处理A,B中元素值相同的结点,应删除。 u=p; p=p-next; delete u; 删除结点(5)设计算法将一个带头结点的单链表A分解为两个具有相同结构的链表B、C,其中B表的结点为A表中值小于零的结点,而C表的结点为A表中值大于零的结点(链表A的元素类型为整型,要求B、C表利用A表的结点)。(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。ElemType Max (LinkList L )精选文档if(L-next=NULL) return NULL;pmax=L-next; /假定第一个结点中数据具有最大值p=L-next

13、-next;while(p != NULL )/如果下一个结点存在if(p-data pmax-data) pmax=p;p=p-next;return pmax-data;(7)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。void inverse(LinkList &L) / 逆置带头结点的单链表 L p=L-next; L-next=NULL; while ( p) q=p-next; / q指向*p的后继 p-next=L-next; L-next=p; / *p插入在头结点之后 p = q; (8)设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 自考

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