云南师范大学信息学院数据结构课件第2章 线性表.pptVIP

云南师范大学信息学院数据结构课件第2章 线性表.ppt

  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文档。上传文档
查看更多
(3) 算法分析 算法 Get 的基本操作:比较 j 和 i 且后移指针。while 循环体中的语句执行次数与被查数据元素在线性表中的位置有关。假设线性表长为 n,如果 1≤i≤n ,则 while 循环体中语句的执行次数为 i,否则执行次数为 n ,因此算法 Get 的时间复杂度为 O(n)。 * Int ListLength(LinkList L) /* L 是带头结点单链表的头指针,求链表长度*/ { Node *p; p=L-next; j = 0; /* 初始化,p 指向头结点,j 为计数器,初始时为0*/ while ( p!=NULL) { p = p-next; j++; } return j ; /*j为求得的单链表长度*/ } /*ListLength*/ * 4.求单链表长度操作 (1) 算法思想 假设要在带头结点的单链表的两个数据元素 ai-1 和 ai 之间插入一个数据元素 e。 查找第 i-1 个结点,检查有关参数的合理性; 查找第i-1个结点并由指针pre指示,  生成一个新结点; 使新结点数据域的值为 e; 将新结点插入到单链表中; 修改第 i-1 个结点的指针域。 * 5.单链表的插入元素算法 Int InsList( LinkList L, int i, ElemType e ) { /*在带头结点单链表 L 中第 i 个位置前插入 e。1≤i ≤表长+1。 Node *pre,*s; int k; /* k 为计数器,初始为 0*/ if (i1) return ERROR; Pre=L; k=0; while ( pre!=Null ki-1 ) { pre = pre-next; k++; } /* 顺指针向后查找,直到 pre 指向第 i–1 个元素或 pre为空*/ if ( ! pre || k i-1 ) /* i<1 或>表长+1*/ { printf(“插入位置不合理!”); return ERROR; } s = ( Node* ) malloc ( sizeof ( LNode ) ); /* 生成新结点*/ * (2) 算法编写 * s-data = e; /*将 e 放入新结点数据域*/ s-next = pre-next; /* 将新结点插入表 L 中*/ p-next = s; /* 修改第 i-1 个结点指针* return OK; }/*InsList*/ (3) 算法分析 算法InsList的基本操作是:在插入之前,需要找到第 i-1 个结点,从算法 Get 的讨论中我们可以得知,算法InsList的时间复杂度为 O(n)。 (1) 算法思想 假设要在线性表中删除数据元素 ai 。 寻找第 i-1 个结点,并由pre指示, 指示检查有关参数的合理性; 用一个指针r指向被删除结点; 删除第 i 个结点,即修改第 i-1 个结点的指针; 释放第 i 个结点。 * 6.单链表的删除元素算法 Int DelList( LinkList L, int i, ElemType *e ) { /* 在带头结点的单链表 L 中,删除第 i 个元素,并由 e 返回其值。*/ /* 1≤i ≤表长。*/ Node *pre, *r; int k; pre = L; k = 0; *初始化,pre 指向头结点, k 为计数器,初始为0*/ while ( pre-next!=NULL ki-1 ) { pre = pre-next; k++; } /* 顺指针向后查找,直到 pre 指向第 i–1 个元素或 pre-next 为空 if ( ! pre-next ) { printf(“删除位置不合理”) ;return ERROR;} /* 删除位置不合理*/ r= pre-next; /* 用r 指向第 i 个结点*/ pre-next = r-next

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档