ImageVerifierCode 换一换
格式:DOC , 页数:28 ,大小:194KB ,
资源ID:7601712      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7601712.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【pc****0】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【pc****0】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(数据结构线性表答案.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

数据结构线性表答案.doc

1、第一章 线性表2.1 描述以下三个概念的区别:头指针,头结点,首元结点(第一个元素结点)。解:头指针是指向链表中第一个结点的指针。首元结点是指链表中存储第一个数据元素的结点。头结点是在首元结点之前附设的一个结点,该结点不存储数据元素,其指针域指向首元结点,其作用主要是为了方便对链表的操作。它可以对空表、非空表以及首元结点的操作进行统一处理。2.2 填空题。解:(1) 在顺序表中插入或删除一个元素,需要平均移动表中一半元素,具体移动的元素个数与元素在表中的位置有关。 (2) 顺序表中逻辑上相邻的元素的物理位置必定紧邻。单链表中逻辑上相邻的元素的物理位置不一定紧邻。 (3) 在单链表中,除了首元结

2、点外,任一结点的存储位置由其前驱结点的链域的值指示。 (4) 在单链表中设置头结点的作用是插入和删除首元结点时不用进行特殊处理。2.3 在什么情况下用顺序表比链表好?解:当线性表的数据元素在物理位置上是连续存储的时候,用顺序表比用链表好,其特点是可以进行随机存取。2.4 对以下单链表分别执行下列各程序段,并画出结果示意图。解: 2.5 画出执行下列各行语句后各指针及链表的示意图。 L=(LinkList)malloc(sizeof(LNode); P=L; for(i=1;inext=(LinkList)malloc(sizeof(LNode); P=P-next; P-data=i*2-1;

3、 P-next=NULL; for(i=4;i=1;i-) Ins_LinkList(L,i+1,i*2); for(i=1;inext=S;(2) P-next=P-next-next;(3) P-next=S-next;(4) S-next=P-next;(5) S-next=L;(6) S-next=NULL;(7) Q=P;(8) while(P-next!=Q) P=P-next;(9) while(P-next!=NULL) P=P-next;(10) P=Q;(11) P=L;(12) L=S;(13) L=P;解:a. (4) (1) b. (7) (11) (8) (4) (

4、1) c. (5) (12) d. (9) (1) (6)2.7 已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。 a. 删除P结点的直接后继结点的语句序列是_。 b. 删除P结点的直接前驱结点的语句序列是_。 c. 删除P结点的语句序列是_。 d. 删除首元结点的语句序列是_。 e. 删除尾元结点的语句序列是_。(1) P=P-next;(2) P-next=P;(3) P-next=P-next-next;(4) P=P-next-next;(5) while(P!=NULL) P=P-next;(6) while(Q-nex

5、t!=NULL) P=Q; Q=Q-next; (7) while(P-next!=Q) P=P-next;(8) while(P-next-next!=Q) P=P-next;(9) while(P-next-next!=NULL) P=P-next;(10) Q=P;(11) Q=P-next;(12) P=L;(13) L=L-next;(14) free(Q);解:a. (11) (3) (14) b. (10) (12) (8) (3) (14) c. (10) (12) (7) (3) (14) d. (12) (11) (3) (14) e. (9) (11) (3) (14)2

6、.8 已知P结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。a. 在P结点后插入S结点的语句序列是_。b. 在P结点前插入S结点的语句序列是_。c. 删除P结点的直接后继结点的语句序列是_。d. 删除P结点的直接前驱结点的语句序列是_。e. 删除P结点的语句序列是_。(1) P-next=P-next-next;(2) P-priou=P-priou-priou;(3) P-next=S;(4) P-priou=S;(5) S-next=P;(6) S-priou=P;(7) S-next=P-next;(8) S-priou=P-priou;(9) P-priou-nex

7、t=P-next;(10) P-priou-next=P;(11) P-next-priou=P;(12) P-next-priou=S;(13) P-priou-next=S;(14) P-next-priou=P-priou;(15) Q=P-next;(16) Q=P-priou;(17) free(P);(18) free(Q);解:a. (7) (3) (6) (12) b. (8) (4) (5) (13) c. (15) (1) (11) (18) d. (16) (2) (10) (18) e. (14) (9) (17)2.9 简述以下算法的功能。(1) Status A(L

8、inkedList L) /L是无表头结点的单链表 if(L & L-next) Q=L; L=L-next; P=L; while(P-next) P=P-next; P-next=Q; Q-next=NULL; return OK; (2) void BB(LNode *s, LNode *q) p=s; while(p-next!=q) p=p-next; p-next =s; void AA(LNode *pa, LNode *pb) /pa和pb分别指向单循环链表中的两个结点 BB(pa,pb); BB(pb,pa); 解:(1) 如果L的长度不小于2,将L的首元结点变成尾元结点。

9、(2) 将单循环链表拆成两个单循环链表。2.10 指出以下算法中的错误和低效之处,并将它改写为一个既正确又高效的算法。Status DeleteK(SqList &a,int i,int k) /本过程从顺序存储结构的线性表a中删除第i个元素起的k个元素 if(i1|ka.length) return INFEASIBLE;/参数不合法 else for(count=1;count=i+1;j-) a.elemj-i=a.elemj; a.length-; return OK;解:Status DeleteK(SqList &a,int i,int k) /从顺序存储结构的线性表a中删除第i个

10、元素起的k个元素 /注意i的编号从0开始 int j; if(ia.length-1|ka.length-i) return INFEASIBLE; for(j=0;j0,xB.length?A.length:B.length; for(i=0;iB.elemi) j=1; if(A.elemik) j=1; if(B.lengthk) j=-1; if(A.length=B.length) j=0; return j;2.13 试写一算法在带头结点的单链表结构上实现线性表操作Locate(L,x);解:int LocateElem_L(LinkList &L,ElemType x) int

11、i=0; LinkList p=L; while(p&p-data!=x) p=p-next; i+; if(!p) return 0; else return i;2.14 试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。解:/返回单链表的长度int ListLength_L(LinkList &L) int i=0; LinkList p=L; if(p) p=p-next; while(p) p=p-next; i+; return i;2.15 已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起,假设指

12、针hc指向连接后的链表的头结点,并要求算法以尽可能短的时间完成连接运算。请分析你的算法的时间复杂度。解:void MergeList_L(LinkList &ha,LinkList &hb,LinkList &hc) LinkList pa,pb; pa=ha; pb=hb; while(pa-next&pb-next) pa=pa-next; pb=pb-next; if(!pa-next) hc=hb; while(pb-next) pb=pb-next; pb-next=ha-next; else hc=ha; while(pa-next) pa=pa-next; pa-next=hb-

13、next; 2.16 已知指针la和lb分别指向两个无头结点单链表中的首元结点。下列算法是从表la中删除自第i个元素起共len个元素后,将它们插入到表lb中第i个元素之前。试问此算法是否正确?若有错,请改正之。Status DeleteAndInsertSub(LinkedList la,LinkedList lb,int i,int j,int len) if(i0|j0|len0) return INFEASIBLE; p=la; k=1; while(knext; k+; q=p; while(knext; k+; s=lb; k=1; while(knext; k+; s-next=p

14、; q-next=s-next; return OK;解:Status DeleteAndInsertSub(LinkList &la,LinkList &lb,int i,int j,int len) LinkList p,q,s,prev=NULL; int k=1; if(i0|j0|len0) return INFEASIBLE; / 在la表中查找第i个结点 p=la; while(p&knext; k+; if(!p)return INFEASIBLE; / 在la表中查找第i+len-1个结点 q=p; k=1; while(q&knext; k+; if(!q)return I

15、NFEASIBLE; / 完成删除,注意,i=1的情况需要特殊处理 if(!prev) la=q-next; else prev-next=q-next; / 将从la中删除的结点插入到lb中 if(j=1) q-next=lb; lb=p; else s=lb; k=1; while(s&knext; k+; if(!s)return INFEASIBLE; q-next=s-next; s-next=p; /完成插入 return OK;2.17 试写一算法,在无头结点的动态单链表上实现线性表操作Insert(L,i,b),并和在带头结点的动态单链表上实现相同操作的算法进行比较。解:Sta

16、tus Insert(LinkList & L,int i,int b) /在无头结点链表L的第i个元素之前插入元素bp=L;q=(LinkList*)malloc(sizeof(LNode);q.data=b;if(i=1)q.next=p;L=q; /插入在链表头部elsewhile(-i1) p=p-next;q-next=p-next;p-next=q; /插入在第i个元素的位置/ Insert 2.18试写一算法,实现线性表操作Delete(L,i),并和在带头结点的动态单链表上实现相同操作的算法进行比较。解:Status Delete(LinkList &L,int i) / 在无

17、头结点链表L中删除第i个元素if(i=1) L=L-next; / 删除第一个元素elsep=L;while(-i1) p=p-next;p-next=p-next-next; / 删除第i个元素/ Delete 2.19 已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间,并分析你的算法的时间复杂度(注意,mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。解:Status ListDelete_L(LinkList &L,ElemType mi

18、nk,ElemType maxk) LinkList p,q,prev=NULL; if(minkmaxk)return ERROR; p=L; prev=p; p=p-next; while(p&p-datadatanext; else prev-next=p-next; q=p; p=p-next; free(q); return OK;2.20 同2.19题条件,试写一高效的算法,删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同),同时释放被删结点空间,并分析你的算法的时间复杂度。解:void ListDelete_LSameNode(LinkList &L) Li

19、nkList p,q,prev; p=L; prev=p; p=p-next; while(p) prev=p; p=p-next; if(p&p-data=prev-data) prev-next=p-next; q=p; p=p-next; free(q); 2.21 试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表逆置为。解:/ 顺序表的逆置Status ListOppose_Sq(SqList &L) int i; ElemType x; for(i=0;inext; L-next=NULL; while(p) q=p; p=p-next; q-next=L-next;

20、L-next=q; return OK;2.23 设线性表,试写一个按下列规则合并A,B为线性表C的算法,即使得 当时; 当时。线性表A,B和C均以单链表作存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未显式存储。解:/ 将合并后的结果放在C表中,并删除B表Status ListMerge_L(LinkList &A,LinkList &B,LinkList &C) LinkList pa,pb,qa,qb; pa=A-next; pb=B-next; C=A; while(pa&pb) qa=pa; qb=pb; pa=pa-next; pb=pb-next;

21、qb-next=qa-next; qa-next=qb; if(!pa)qb-next=pb; pb=B; free(pb); return OK;2.24 假设有两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构,请编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许表中含有值相同的元素)排列的线性表C,并要求利用原表(即A表和B表)的结点空间构造C表。解:/ 将合并逆置后的结果放在C表中,并删除B表Status ListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C) LinkList pa,pb,qa,qb; p

22、a=A; pb=B; qa=pa; / 保存pa的前驱指针 qb=pb; / 保存pb的前驱指针 pa=pa-next; pb=pb-next; A-next=NULL; C=A; while(pa&pb) if(pa-datadata) qa=pa; pa=pa-next; qa-next=A-next; /将当前最小结点插入A表表头 A-next=qa; else qb=pb; pb=pb-next; qb-next=A-next; /将当前最小结点插入A表表头 A-next=qb; while(pa) qa=pa; pa=pa-next; qa-next=A-next; A-next=q

23、a; while(pb) qb=pb; pb=pb-next; qb-next=A-next; A-next=qb; pb=B; free(pb); return OK;2.25 假设以两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中的元素值各不相同),现要求另辟空间构成一个线性表C,其元素为A和B中元素的交集,且表C中的元素有依值递增有序排列。试对顺序表编写求C的算法。解:/ 将A、B求交后的结果放在C表中Status ListCross_Sq(SqList &A,SqList &B,SqList &C) int i=0,j=0,k=0; while(iA.length &

24、 jB.length) if(A.elemiB.elemj) j+; else ListInsert_Sq(C,k,A.elemi); i+; k+; return OK;2.26 要求同2.25题。试对单链表编写求C的算法。解:/ 将A、B求交后的结果放在C表中,并删除B表Status ListCross_L(LinkList &A,LinkList &B,LinkList &C) LinkList pa,pb,qa,qb,pt; pa=A; pb=B; qa=pa; / 保存pa的前驱指针 qb=pb; / 保存pb的前驱指针 pa=pa-next; pb=pb-next; C=A; wh

25、ile(pa&pb) if(pa-datadata) pt=pa; pa=pa-next; qa-next=pa; free(pt); else if(pa-datapb-data) pt=pb; pb=pb-next; qb-next=pb; free(pt); else qa=pa; pa=pa-next; while(pa) pt=pa; pa=pa-next; qa-next=pa; free(pt); while(pb) pt=pb; pb=pb-next; qb-next=pb; free(pt); pb=B; free(pb); return OK;2.27 对2.25题的条件作

26、以下两点修改,对顺序表重新编写求得表C的算法。(1) 假设在同一表(A或B)中可能存在值相同的元素,但要求新生成的表C中的元素值各不相同;(2) 利用A表空间存放表C。解:(1)/ A、B求交,然后删除相同元素,将结果放在C表中Status ListCrossDelSame_Sq(SqList &A,SqList &B,SqList &C) int i=0,j=0,k=0; while(iA.length & jB.length) if(A.elemiB.elemj) j+; else if(C.length=0) ListInsert_Sq(C,k,A.elemi); k+; else if

27、(C.elemC.length-1!=A.elemi) ListInsert_Sq(C,k,A.elemi); k+; i+; return OK;(2)/ A、B求交,然后删除相同元素,将结果放在A表中Status ListCrossDelSame_Sq(SqList &A,SqList &B) int i=0,j=0,k=0; while(iA.length & jB.length) if(A.elemiB.elemj) j+; else if(k=0) A.elemk=A.elemi; k+; else if(A.elemk!=A.elemi) A.elemk=A.elemi; k+;

28、i+; A.length=k; return OK;2.28 对2.25题的条件作以下两点修改,对单链表重新编写求得表C的算法。(1) 假设在同一表(A或B)中可能存在值相同的元素,但要求新生成的表C中的元素值各不相同;(2) 利用原表(A表或B表)中的结点构成表C,并释放A表中的无用结点空间。解: (1)/ A、B求交,结果放在C表中,并删除相同元素Status ListCrossDelSame_L(LinkList &A,LinkList &B,LinkList &C) LinkList pa,pb,qa,qb,pt; pa=A; pb=B; qa=pa; / 保存pa的前驱指针 qb=p

29、b; / 保存pb的前驱指针 pa=pa-next; pb=pb-next; C=A; while(pa&pb) if(pa-datadata) pt=pa; pa=pa-next; qa-next=pa; free(pt); else if(pa-datapb-data) pt=pb; pb=pb-next; qb-next=pb; free(pt); else if(pa-data=qa-data) pt=pa; pa=pa-next; qa-next=pa; free(pt); else qa=pa; pa=pa-next; while(pa) pt=pa; pa=pa-next; qa-next=pa; free(pt); while(pb) pt=pb; pb=pb-next; qb-next=pb; free(pt); pb=B; free(pb); return OK;(2)/ A

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服