版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据结构第二章习题解答一、单选题 1在一个长度为n的顺序存储线性表中,向第i个元素(1in+1)之前插入一个新元素时,需要从后向前依次后移 (B) 个元素。 A、n-i B、n-i+1 C、n-i-1
2、160; D、i 2在一个长度为n的顺序存储线性表中,删除第i个元素(1in+1)时,需要从前向后依次前移 (A)个元素。 A、n-i B、n-i+1 C、n-i-1 &
3、#160; D、i 3. 在一个长度为n的线性表中顺序查找值为x的元素时,在等概率情况下,查找成功时 的平均查找长度(即需要比较的元素个数)为( C )。 A. n B. n/2 C. (n+1)/2 D. (n-1)/2 4在一个长度为 n的线性表中,删除值为x的元素时需要比较元素和移动元素的总次 数为(C )。 A. (n+1)/2 B. n/2 C. n D. n+1 5. 在一个顺序表的表尾插入一个元素的时间复杂度为(B )。 A. O(n) B. O(1) C. O(n*n) D. O(log2n) 6.若一个结点的引用为p,它的前驱结点的
4、引用为q,则删除p的后继结点的操作为(B )。 A. p=p.next.next B. p.next=p.next.next C. q.next=p.next
5、 D. q.next=q.next.next 8. 假定一个多项式中x的最高次幂为n,则在保存所有系数项的线性表表示中,其线性 表长度为(A )。 A. n+1 B. n C. n-1 D. n+2 二、填空题 1对于当前长度为n的线性表,共包含有_多个插入元素的位置,共包含有 _多个删除元素的位置。(答案n+1 n) 2若经常需要对线性表进行表尾插入和删除运算,则最好采用_存储结构,若经 常需要对线性表进行表头插入和删除运算,则最好采用_存储结构。
6、0;(答案:顺序 链式)3由n个元素生成一个顺序表,若每次都调用插入算法把一个元素插入到表头,则整个 算法的时间复杂度为_,若每次都调用插入算法把一个元素插入到表尾,则整个算法 的时间复杂度为_。 (答案: O(n) O(n)4由n个元素生成一个单链表,若每次都调用插入算法把一个元素插入到表头,则整个 算法的时间复杂度为_,若每次都调用插入算法把一个元素插入到表尾,则整个算法 的时间复杂度为_。 (答案: O(1) O(1)5. 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_, 在
7、表尾插入元素的时间复杂度为_。 (答案:O(n),O(1)6. 对于一个单链接存储的线性表,在表头插入结点的时间复杂度为_,在表尾插 入结点的时间复杂度为_。 (答案:O(1),O(1)7. 从一个顺序表和单链表中访问任一个给定位置序号的元素(结点)的时间复杂度分别 为_和_。(答案:O(1),O(n)三、 算法设计题1. 修改从顺序存储的集合中删除元素的算法,要求当删除一个元素后检查数组空间的大小,若空间利用率小于40%同时数组长度大于maxSize时则释放数组的一半存储空间。public void remove(int i) throws Excep
8、tionif(i<0|i>curLen-1)throw new Exception("删除位置非法");for(int j=i;i<curLen-1;i+)listItemj=listItemj+1;curLen-;if(double)curLen/maxSize<0.4 && curLen>maxSize) maxSize=maxSize/2;listItem=new ObjectmaxSize; System.out.println(maxSize);2. 编写顺序存储集合类sequenceSet中的构造方法,它包含有一维数
9、组参数Object a,该方法中给setArray数组分配的长度是a数组长度的1.5倍,并且根据a数组中的所有不同的元素值建立一个集合。public sequenceSet(Object a) length=0; setArray=new Object(int)(a.length*1.5); for(int i=0; i<a.length; i+) int j; for(j=0; j<length; j+) if(setArrayj.equals(ai) break; if(j=length) setArraylength=ai; length+; 3. 编写一个静态成员方法,返回
10、一个顺序存储的集合set中所有元素的最大值,假定元素类型为Double。 public static Object maxValue(Set set) sequenceSet dset=(sequenceSet)set; if(dset.size()=0) return null; Double x=(Double)dset.value(1); for(int i=1; i<dset.size(); i+) Double y=(Double)dset.value(i+1); if(pareTo(x)>0) x=y; return x; 4. 编写顺序存储集合类sequenceSet
11、中的复制构造方法,它包含有一个参数为Set set,实现把set所指向的顺序集合的内容复制到当前集合中的功能。 public sequenceSet(Set set) sequenceSet dset=(sequenceSet)set; setArray=new Objectdset.setArray.length; for(int i=0; i<dset.length; i+) setArrayi=dset.setArrayi; length=dset.length; 5. 编写一个静态成员方法,实现两个顺序存储集合的差运算,并返回所求得的差集。 public static Set d
12、ifference(Set set1, Set set2) sequenceSet dset2=(sequenceSet)set2; sequenceSet1 dset3=new sequenceSet(set1); for(int i=0; i<dset2.size(); i+) dset3.remove(dset2.value(i+1); return dset3; 6. 编写一个静态成员方法,实现两个链接存储集合的差运算,并返回所求得的差集。 public static Set difference1(Set set1, Set set2) linkSet dset1=(linkS
13、et)set1; linkSet dset2=(linkSet)set2; linkSet dset3=new linkSet(); for(int i=0; i<dset1.size(); i+) dset3.add(dset1.value(i+1); for(int i=0; i<dset2.size(); i+) dset3.remove(dset2.value(i+1); return dset3; 7. 编写一个带有主函数的程序,其中包含两个静态成员方法,分别为使用顺序和链接存储的线性表解决约瑟夫(Josephus)问题。约瑟夫的问题是:设有n个人围坐在一张圆桌周围,现从
14、某个人开始从1报数,数到m的人出列(即离开坐位,不参加以后的报数),接着从出列的下一个人开始重新从1报数,数到m的人又出列,如此下去直到所有人都出列为止,试求出这n个人的出列次序。 例如,当n=8,m=4时,若从第一个人开始报数,假定n个人对应的编号依次为1、2、n,则得到的出列次序为:4,8,5,2,1,3,7,6。 在每个解决约瑟夫问题的静态成员方法中,要求以整型对象n、m和s作为参数,n表示开始参加报数的人数,m为下一次要出列的人所报出的数字序号,s为最开始报数的那个人的编号。 注意:人的座位是首位相接的,所以报数是循环进行的,最后一个人报数后,接着是最前面的一个人报数。 参考程序如下:
15、 public class Chap3_15 static void seqJosephus(int n, int m, int s) /使用顺序表解决约琵夫问题的算法,n为人数,每次报数到m出列 if(n<=0 | m<=0 | s<=0) System.out.println("参数值不合法,退出运行!"); System.exit(1); sequenceList a=new sequenceList(n); /定义和创建一个线性表a int i,k; for(i=1; i<=n; i+) a.add(i,i); /插入n个元素,元素值依次为1
16、n k=s; /给k赋初值为s,开始从编号为s的人起报数 for(i=1; i<n; i+) /循环n-1次,每次使一个人出列 k=(k+m-1)%a.size(); /计算出待出列的元素序号 if(k=0) k=a.size(); /若k的值为0则应修改为表尾的序号 System.out.print(a.value(k)+", "); /输出序号为k的元素值 a.remove(k); /从线性表中删除序号为k的元素 System.out.println(a.value(1); /输出最后剩余的一个元素的值 static void linkJosephus(int n
17、, int m, int s) /使用链表解决约琵夫问题的算法,n为人数 if(n<=0 | m<=0 | s<=0) System.out.println("参数值不合法,退出运行!"); System.exit(1); linkList a=new linkList(); /定义和创建一个空的线性链表a int i,k; for(i=n; i>=1; i-) a.add(i,1); /插入n个结点,结点值依次为1n Node p=a.prior(), q=p.next, head=p; /q指向表头结点,p为前驱 k=1; /给k赋初值1 while(k<s) /循环结束后q结点为第s个结点 p=q; q=q.next; if(q=head) p=q; q=q.next;/若q为附加表头结点,则移到表头 k+; for(i=1; i<n; i+) /循环n-1次,每次从1报数到m k=1; while(k<m) /每次循环结束,q指向要出列的结点 p=q; q=q.next; if(q=head) p=q; q=q.next;/使指针跳过表头附加结点 k+;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西省太原市2026年高三年级二模生物+答案
- 2025-2030中国塑料复合机械行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国培养基血清和试剂-细胞培养行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国垃圾回收机器人行业经营状况与未来前景预测报告
- 护理分级标准深度解析
- 打桩送桩工程量计算案例
- 可口可乐公司营销渠道管理策略
- 5.1 走近老师 课件(内嵌视频)2025-2026学年统编版道德与法治七年级上册
- 2025年吉林省松原市初二学业水平地生会考考试题库(附含答案)
- 2025年浙江嘉兴市初二学业水平地生会考试题题库(答案+解析)
- DB51-T 3251-2025 煤矿井下应急广播系统使用管理规范
- 会计研究方法论 第4版 课件全套 吴溪 第1-20章 导论- 中国会计学术研究成果的国际发表
- 智慧树知到《形势与政策(北京大学)》2025春期末答案
- DB22-T 389.4-2025 用水定额 第4部分:居民生活
- 曲妥珠单抗心脏毒性的管理
- 贵州中医药大学时珍学院《C#程序语言设计》2023-2024学年第一学期期末试卷
- 法院委托评估价格异议申请书
- 卫生事业管理学:第十一章 社会健康资源管理
- 电工二级技师试题及答案
- DL-T5706-2014火力发电工程施工组织设计导则
- 杆上变压器安装施工方案
评论
0/150
提交评论