ImageVerifierCode 换一换
格式:DOC , 页数:12 ,大小:84KB ,
资源ID:6370534      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6370534.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(教材第二章部分习题参考解答.doc)为本站会员(j35w19)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

教材第二章部分习题参考解答.doc

1、教材第二章部分习题参考解答一、单选题1. B 2. A 3. C 4. B 5. D 6. C二、填空题1值 指针2(38,56,25,60,42,74)3. O(n) O(1)4. O(1) O(n)5. i-1 i+16. p-next ap.next7. 表头8前驱 后继9表尾 表头10HL-next=NULL HL-next=HL11. ai.next=a1.next; a1.next=i;12. i=a1.next; a1.next=ai.next;13. p=ai.next; ai.next=ap.next; i=p;14. aj.next=ai.next; ai.next=j;

2、三、普通题第 1 小题1. (79, 62, 34, 57, 26, 48) 2. (26, 34, 48, 57, 62, 79) 3. (48, 56, 57, 62, 79, 34) 4. (56, 57, 79, 34) 5. (26, 34, 39, 48, 57, 62) 第 2 小题分析:为了排版方便,假定采用以下输出格式表示单链表示意图:每个括号内的数据表示一个元素结点,其中第一个数据为元素值,第二个数据为后继结点的指针,第一个元素结点前的数值为表头指针。1. (7(79,6), (62,5), (34,4), (57,3), (26,2), (48,0) 2. (3(26,5

3、), (34,2), (48,4), (57,6), (62,7), (79,0) 3. (2(48,8), (56,4), (57,6), (62,7), (79,5), (34,0) 4. (8(56,4), (57,7), (79,5), (34,0) 第 3 小题1. ElemType DMValue(List j-)L.listj+1=L.listj;L.listi-1=x;L.size+;4. void Delete2(Listwhile(i=s) /p 指向下一个待逆序的结点。/将 q 结点插入到已逆序单链表的表头。q-next=HL; HL=q;2. void Delete1(

4、LNode*j+;if(cp=NULL) cerrnext;elseap-next=cp-next;delete cp;3. ElemType MaxValue(LNode* HL)/从单链表中查找出所有元素的最大值,该值由函数返回。if(HL=NULL) cerrdata;LNode* p=HL-next;while(p!=NULL) if (maxdata) max=p-data;p=p-next;return max;4. int Count(LNode* HL, ElemType x)/统计出单链表中结点的值等于给定值 x 的结点数。 int n=0;while(HL!=NULL) i

5、f(HL-data=x) n+;HL=HL-next;return n;5. void Create(LNode*for(int i=n-1; i=0; i-)InsertFront(HL,ai);6. void OrderList(LNode* /p 指向待处理的第一个结点,初始指向原表头结点。HL=NULL; /HL 仍为待建立的有序表的表头指针,初始值为空。while(p!=NULL) /把原单链表中的结点依次进行有序链接。LNode* q=p; /q 指向待处理的结点。p=p-next; /p 指向下一个待处理的结点。LNode *ap=NULL, *cp=HL;/cp 指向有序表中待

6、比较的结点,ap 指向其前驱结点。while(cp!=NULL) /为插入 q 结点寻找插入位置。if(q-datadata)break;else ap=cp;cp=cp-next;/将 q 结点插入到 ap 和 cp 结点之间。q-next=cp;if(ap=NULL) HL=q;elseap-next=q;7. LNode* Merge1(LNode* /a 结点作为结果有序单链表的表头附加结点,这样/便于处理, 处理结束后返回 a 结点的指针域的值。LNode* p= /p 指向结果有序单链表的表尾结点,p-next=NULL; /初始指向表头附加结点。while(p1!=NULL) p

7、1=p1-next;else p-next=p2; p2=p2-next;p=p-next;if(p1!=NULL) p-next=p1;if(p2!=NULL) p-next=p2;p1=p2=NULL;return a.next;8. LNode* Merge2(LNode* p1, LNode* p2)/根据两个有序单链表生成一个新的有序单链表。LNode a; /用 a 作为新的有序单链表的表头附加结点。LNode* p= /p 指向结果有序单链表的表尾结点,p-next=NULL; /初始指向表头附加结点。while(p1!=NULL)if(p1-datadata) /由 p1-da

8、ta 建立新结点,然后 p1 指针后移。newptr-data=p1-data;p1=p1-next;else /由 p2-data 建立新结点,然后 p2 指针后移。newptr-data=p2-data;p2=p2-next;/将 newptr 结点插入到结果有序表的表尾。p-next=newptr;p=newptr;while(p1!=NULL) /继续处理 p1 单链表中剩余的结点。LNode* newptr=new LNode;newptr-data=p1-data;p1=p1-next;p-next=newptr;p=newptr;while(p2!=NULL) /继续处理 p2

9、单链表中剩余的结点。LNode* newptr=new LNode;newptr-data=p2-data;p2=p2-next;p-next=newptr;p=newptr;p-next=NULL;return a.next;9. void Separate(LNode* HL, LNode* /a 和 b 结点分别作为 p1 和 p2 单链表的表头附加结点。LNode *t1= /t1 和 t2 分别作为指向 p1 和 p2 单链表/的表尾结点,初始指向表头附加结点。LNode* p=HL;while(p!=NULL) /每循环一次产生一个新结点,并把它加入到/p1 或 p2 单链表的末尾

10、。LNode* newptr=new LNode;if(p-data%2=1) newptr-data=p-data;t1-next=newptr;t1=newptr;else newptr-data=p-data;t2-next=newptr;t2=newptr;p=p-next;t1-next=t2-next=NULL;p1=a.next; p2=b.next; /把指向两个单链表的表头结点的/指针分别赋给 p1 和 p2 返回。 第 6 小题参考算法如下:void Josephus(int n, int m, int s)/使用带表头附加结点的循环单链表解决约瑟夫问题。/生成表头附加结点

11、,此时循环单链表为空。LNode* HL=new LNode;HL-next=HL;int i;/生成含有 n 个结点的、结点值依次为 1,2,.,n 的带表头附加结点/的循环单链表。for(i=n; i=1; i-) /生成新结点。LNode* newptr=new LNode;newptr-data=i;/把新结点插入到表头。newptr-next=HL-next;HL-next=newptr;/从表头开始顺序查找出第 s 个结点,对应第一个开始报数的人。LNode *ap=HL, *cp=HL-next;for(i=1; inext;/若 cp 指向了表头附加结点,则仍需后移 ap 和

12、cp 指针,/使之指向表头结点。if(cp=HL) ap=HL; cp=HL-next; /依次使 n-1 个人出列。for(i=1; inext;if(cp=HL) ap=HL; cp=HL-next; /输出 cp 结点的值,即出列的人。coutdatanext=cp-next;delete cp;/使 cp 指针指向被删除结点的后继结点。cp=ap-next;/若 cp 指向了表头附加结点,则后移 ap 和 cp 指针。if(cp=HL) ap=HL; cp=HL-next; /使最后一个人出列。coutnext-datanext;delete HL;第 9 小题参考算法如下:void

13、OrderList(SLNode* SL)/假定 SLNode 类型为按题目要求所定义的结点类型,SL 为指向/表头附加结点的指针。SL-range=NULL;for(SLNode* p=SL-next; p!=NULL; p=p-next) /每循环一次把 p 所指向的结点按序插入到以 range 域/链接的有序表中SLNode *ap, *cp;/为 p 结点寻找合适的插入位置。ap=SL; cp=ap-range;while(cp!=NULL)if(p-datadata)break;else ap=cp;cp=cp-range;/插入位置在 ap 和 cp 之间,把 p 结点插入其中。p

14、-range=cp;ap-range=p;第 10 小题参考程序如下:/lx2-7.cpp#include#includetypedef int ElemType; /规定元素类型为整型。struct SLNode /定义单链表结点。ElemType data;SLNode* next;SLNode* range;void OrderList(SLNode* SL)SL-range=NULL;for(SLNode* p=SL-next; p!=NULL; p=p-next) SLNode *ap, *cp;/为 p 结点寻找合适的插入位置。ap=SL; cp=ap-range;while(cp

15、!=NULL)if(p-datadata)break;else ap=cp;cp=cp-range;/插入位置在 ap 和 cp 之间,把 p 结点插入其中。p-range=cp;ap-range=p;void main()/按 next 域链接生成具有 10 个整数元素结点的链表。SLNode* a=new SLNode;a-next=NULL;int i;SLNode* p;for(i=0; idata=rand()%30; /假定产生 30 以内的随机整数。p-next=a-next;a-next=p;/按 next 域链接的次序输出单链表。for(p=a-next; p!=NULL; p=p-next)coutdatarange; p!=NULL; p=p-range)coutdata“ “;coutendl;

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报