[研究生入学考试]第二章 线性表.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[研究生入学考试]第二章 线性表

第二章 线性表 线性结构是n个数据元素的有序(次序) 集合。基本特征: (1)存在唯一的一个被称作“第一个”的数据 元素 (2)存在唯一的一个被称作“最后一个”的数 据元素 (3)除第一个外,集合中的每个数据元素均 只有一个前驱 (4)除最后一个外,集合中的每个数据元素 均只有一个后继 线性表:n个数据元素组成的有限序 列。表示为(a1,a2,…,ai, ai+1,…,an) 实现步骤: 线性表的顺序表示: 用一组地址连续的储存单元依次储存线性表的数据元素。 顺序表: 定义:顺序储存结构表示的线性表。 元素地址计算方法: LOC(ai+1) = LOC(ai) + L LOC(ai) = LOC(a1) + (i-1)*L 其中: L—一个元素占用的存储单元个数 LOC(ai)—线性表第i个元素的地址 算法时间复杂度T(n): 设Pi是在第i个元素之前插入一个元素的概率,则在 长度为n的线性表中插入一个元素时,所需移动的元 素次数的平均次数为: 算法评价 设Qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为: 顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用 不充分 表容量难以扩充 一、单链表 用一组任意的存储单元存储线性表的数据元素。 采用顺序表实现例2-2(算法2.6) void MergeList-Sq(SqList La, SqList Lb,SqList Lc){ //归并La和Lb得到新顺序表Lc pa=La.elem; pb=Lb.elem; Lc.listsize=Lc.length=La.length+Lb.length; pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemType)); if(!Lc.elem)exit(OVERFLOW); pa-last=La.elem+La.length-1;_ pb-last=Lb.elem+Lb.length-1;_ while(pa=pa-lastpb=pb-last){ //归并 if(*pa=*pb) *pc++=*pa++; else *pc++=*pb++;} while(pa=pa-last) *pc++=*pa++; //插入La剩余元素 while(pb=pb-last) *pc++=*pb++; //插入Lb剩余元素 }//MergeList-Sq 采用单链表实现例2-2(算法2.7) void MergeList-L(Linklist La, Linklist Lb, Linklist Lc){ //归并La和Lb得到新链表Lc pa=La-next; pb=Lb-next; Lc=pc=La; while(papb){ if(pa-data=pb-data){ pc-next=pa; pc=pa; pa=pa-next;} else {pc-next=pb; pc=pb; pb=pb-next;} } pc-next=pa?pa:pb; free(Lb); }//MergeList-L 单链表的优点 它是一种动态结构,整个存储空间为多个链表共用 不需预先分配空间 插入、删除操作方便 单链表的缺点 指针占用额外存储空间 不能随机存取,查找速度慢 双向链表 2.4 一元多项式的表示和相加 表处理的典型应用:符号多项式的操作。 一个一元多项式Pn(x)可记作: Pn(x)=p0+p1X+p2X2+……+ pnXn 在计算机里,可用一个线性表表示: P=(p0,p1,p2,……,pn) 每一项的指数i隐含在其系数pi的序号里。 若Qm(x)是一元多项式,则: Q=(q0,q1,q2,……,qm) 设mn,则Rn(x)=Pn(x)+Qm(x),即: R=(p0+q0,p1+q1,p2+q2,……,pm+qm,pm+1,……,pn) 假如S(x)=1+3x1000+2x20000 要用一长度为20001的线性表来表示,表中仅有三个非零元素,造成内存空间的极大浪费, 如果只存储非零系数项,则显然必须同时存储相应的指数: P=((p0,e0),(p1,e1),(p2,e2),……,(pn,en)) 抽象数据类型Polynomial 的实现:typedef struct { float coef; int e

文档评论(0)

ctuorn0371 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档