数据结构与软件方法线性表详解.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文档。上传文档
查看更多
(4) 按值查找Locate(L,x) 在线性表L中查找值为x的数据元素,若查找成功则返回第一个值为x的元素的序号或地址; 否则,在L中未找到值为x的数据元素,返回一特殊值(例如0),表示查找失败。 (5) 插入元素Inselem (L,i,x) 在线性表L的第 i 个位置上插入一个值为 x 的新元素,这样使原序号为 i , i+1, ..., n 的数据元素的序号变为 i+1,i+2, ..., n+1,要求1≤i≤Getlen(L)+1,插入后原表长增1。 (6) 删除元素Delelem(L,i) 在线性表L中删除序号为i的数据元素,删除后使序号为 i+1, i+2,..., n 的元素变为序号i, i+1,...,n-1,要求1≤i≤Getlen(L),删除后表长减1。 2.2 线性表的顺序结构及运算实现 3.按序号取元素Getelem(L,i)的实现 按前面的约定,序号为i的元素存储在数组下标为i-1的数组元素中,所以可直接从该数组元素中取得值。i的有效值应大于等于1和小于等于线性表的实际长度。 ElemType Getelem(sqLlist *L,int i) { if(i1 || iL-length) { printf(“error”); exit(1); } return L-data[i-1]; } 4.查找运算locate(L,x)的实现 要 确定值为x的元素在L表中的位置,需要依次比较各元素。当查询到第一个满足条件的数据元素时,返回其序号,否则返回0,表示查找失败。 查找操作的具体实现算法如下: int Locate(sqList *L,ElemType x) { int i; i=0; while(iL-length L-data[i]!=x) i++; if(iL-length) return i ; else return 0; } (a1,a2,…,ai-1,x,ai,ai+1,…,an ), i 的取值范围为1≤i≤n+1 。下图表示一个顺序表中的数组在进行插入运算前后,数据元素在数组中的下标变化。 void Inselem(sqList *L,int i,Elemtype x) { if (i1 || iL-length+1) { printf(“Error!”) ; //插入位置出错 exit(1); } if(L-length==MaxLen) { printf(“overflow!”) ;   //表已满 exit(1); } for(j=L-length;j=i;j--) L-data[j+1]=L-data[j]; //数据元素后移 L-data[i]=x; //插入x L-length++; //表长度加1 } 由此可以看出,在线性表上做插入操作需要移动表中一半的数据元素,当n较大时,算法的效率是比较低的,所以在线性表上进行插入操作的时间复杂度为O(n)。 6.顺序表的删除运算Delelem(L,i)的实现 顺序表的删除运算是指将表中第 i 个元素从线性表中去掉,原表长为 n 的线性表(a1,a2,… ,ai-1,ai,ai+1,…,an) 。进行删除以后的线性表表长变为 n-1的表 (a1,a2,… ,ai-1,ai+1,… ,an), i 的取值范围为:1≤i≤n 。 图2-5表示一个顺序表的数组在进行删除运算前后,其数据元素在数组中的下标变化。 图2-5 线性表中的删除运算示意图 在线性表上完成上述运算通过以下两个操作来实现: (1) 线性表中第i个至第n个元素(共n-i+1个元素)依次向前移动一个位置。将所删除的元素ai覆盖掉,从而保证逻辑上相邻的元素物理位置也相邻。 (2)修改线性表长度,使其减1。 线性表的删除算法如下: void Delelem(sqList *L,int i) //删除线性表中第i个位置上的元素 { if(i1 || iL-length) //检查空表及删除位置的合法性 { printf ("不存在第i个元素");exit(0); } for(j=i;j=L-length-1;j

文档评论(0)

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

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

1亿VIP精品文档

相关文档