数据结构第02讲_线性表类型定义和顺序表_C.pptVIP

数据结构第02讲_线性表类型定义和顺序表_C.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* * status listinsert (SqList L,int i,ElemtType e) { if (i1 || iL.len+1) return ERROR; // i值不合法 if (L.len = = L.lsize) { // 当前存储空间已满,增加分配 newbase = (Elemtype * ) realloc(L.elem, (L.lsize + LISTINCREMENT) * (sizeof(ElemType)); if (!newbase) exit(overflow); // 存储分配失败 L.elem = newbase; // 新基址 lsize += LISTINCREMENT; } // 增加存储容量 q = (L.elem[i-1]); // q为插入位置 for (p = (L.elem[L.len-1]);p=q;--p) *(P+1) = * P; // 元素后移 *q = e; ++L.len; // 插入e,表长增1 return OK; } //listinsert 注意:C语言中数组的下标从“0”开始,因此,若L是SqList类型的顺序表,则表中第i个数据元素是L.elem[i-1]。 21 18 30 75 42 56 87 21 18 30 75 例:ListInsert_Sq(L, 5, 66) L.len-1 0 p p p q 87 56 42 66 q = (L.elem[i-1]); for (p = (L.elem[L.len-1]); p = q; --p) *(p+1) = *p; *q = e; p for (j=L.len-1; j=i-1; j—) L.elem[j+1]=L.elem[j]; L.elem[i-1]=e 考虑移动元素的平均情况: 假设在第i个元素之前插入的概率为 Pi,则在长度为n 的线性表中插入一个元素所需移动元素次数的期望值为: 若假定在线性表中任何一个位置上进行插入的概率都是相等的,则移动元素的期望值为: ? + - = + = 1 1 ) 1 ( n i i is i n p E ? + - + = + = 1 1 ) 1 ( 1 1 n i is i n n E 2 n = a1 a2 … ai-1 ai ai+1 … an 例2:从线性表中删除第i个位置的元素。 分析:删除元素时,线性表的逻辑结构发生什么变化? (a1,…, ai-1, ai, ai+1,…, an) 改变为 ai-1, ai, ai, ai+1 ai-1, ai+1 (a1,…, ai-1, ai+1,…, an) ai+1 … an a1 a2 … ai-1 表长度减1 删除的过程为: (1)检查i的合法性; (2)删除第i个位置的元素,即使后面第i至第n个元素(共 n–i个)依次前移一个位置; (3)使线性表的长度减1;返回删除成功。 status ListDelete (SqList L,int i,ElemType e) { if (i1 || iL.len ) return ERROR; // 删除位置不合法 p = (L.elem[i-1]); // p 为被删除元素的位置 e = *p; // 被删除元素的值赋给 e q = L.elem + L.len – 1; // 表尾元素的位置 for (++p; pq; ++p) *(P - 1) = * P; // 被删除元素之后的元素左移 -- L.len; // 表长减1 return OK; } // ListDelete 21 18 30 75 42 56 87 21 18 30 75 L.len-1 0 p p p q 87 56 p = (L.elem[i-1]); q = L.elem+L.len-1; for (++p; p = q; ++p) *(p-1) = *p; 例:ListDelete_Sq(L, 5, e) p e=L.elem[i-1]; for (j=i; j=L.len-1; j++) L.elem[j-1]=L.

文档评论(0)

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

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

1亿VIP精品文档

相关文档