数据额结构第2篇.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,要查找表中第i个结点,则需要从单链表的头指针L出发,从头结点(L-next)开始顺着链域扫描, 用指针p指向当前扫描到的结点, 初值指向头结点,用j做计数器,累计当前扫描过的结点数(初值为0), 当j = i 时, 指针p所指的结点就是要找的第i个结点。 Node *Get (LinkList L, int i) /* 在带头结点的单链表L中查找第i个结点, 若找到(1≤i≤n), 则返回该结点的存储位置; 否则返回NULL */ { int j;  Node *p;  p=L; j=0; /* 从头结点开始扫描 */ while (p-next! =NULLji) { p=p-next; /* 扫描下一结点 */ j++; /* 已扫描结点计数器 */ } if(i==j) return p; /* 找到了第i个结点 */ else return NULL; /* 找不到, i≤0或in */ } /* Get */ 【算法2.8 在单链表L中查找第i个结点】 算法描述:按值查找是指在单链表中查找是否有结点值等于e的结点,若有的话, 则返回首次找到的其值为e的结点的存储位置,否则返回NULL。查找过程从单链表的头指针指向的头结点出发,顺着链逐个将结点的值和给定值e作比较。 2) 按值查找 Node *Locate( LinkList L, ElemType key) /* 在带头结点的单链表L中查找其结点值等于key的结点, 若找到则返回该结点的位置p;否则返回NULL */ { Node *p;  p=L-next; /* 从表中第一个结点比较 */ while (p!=NULL) if (p-data!=key) p=p-next;  else break; /* 找到结点key, 退出循环 */ return p;  } /* Locate */ 【算法2.9 在单链表L中查找值等于key的结点】 算法描述:要在带头结点的单链表L中第i个位置插入一个数据元素e,需要首先在单链表中找到第i-1个结点并由指针pre指示,然后申请一个新的结点并由指针s指示,其数据域的值为e,并修改第i-1个结点的指针使其指向s,然后使s结点的指针域指向原第i个结点。 插入结点的过程如图2.11所示。 4. 单链表插入操作 图2.11 在单链表第i个结点前插入一个结点的过程 示例 int InsList(LinkList L, int i, ElemType e) { /*在带头结点的单链表L中第i个位置插入值为e的新结点 */ Node *pre, *s; int k;  pre=L; k=0;  while (pre != NULL ki-1) /* 在第i个元素之前插入,则先找到第i-1个 数据元素的存储位置,使指针pre指向它 */  { pre=pre-next; k=k+1; } if (k! =i-1)  /* 即while循环是因为pre=NULL或i1而跳出的, 所以一定是插入位置 不合理所致 */  { printf (″插入位置不合理!″);  return ERROR;  } s=(Node*)malloc(sizeof(Node)); /* 为e申请一个新的结点并由s指向它 */ s-data=e; /* 将待插入结点的值e赋给s的数据域 */ s-next=pre-next; /* 完成插入操作 */ pre-next=s;  return OK; } 【算法2.10 单链表插入操作】    算法描述:欲在带头结点的单链表L中删除第i个结点,则首先要通过计数方式找到第i-1个结点并使p指向第i-1个结点,而后删除第i个结点并释放结点空间。删除过程如图2.12所示。  5. 删除 图2

文档评论(0)

187****5045 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档