-数据结构-线性表.PPT

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
线性表应用——多项式的表示及运算 (7) 按元素值查找LocateElem(L,e) 思路:在单链表L中从头开始找第1个值域与e相等的 结点,若存在则返回逻辑序号,否则返回0。 int LocateElem(LinkList *L,ElemType e){ LinkList *p=L-next; int i=1; while (p!=NULL p-data!=e){ p=p-next; i++; } if (p==NULL) return 0; else return i; } (8) 插入数据元素ListInsert(L,i,e) 思路:先在单链表L中寻找到第i-1个结点*p,若存在,将值为e的结点*s插入到其后。 bool ListInsert(LinkList *L,int i,ElemType e){ int j=0; LinkList *p=L,*s; while (ji-1 p!=NULL){ //查找第i-1个结点 j++; p=p-next; } if (p==NULL) return false; //未找到 else{ s=(LinkList *)malloc(sizeof(LinkList)); s-data=e; s-next=p-next; //将*s插入到*p之后 p-next=s; return true; } } (9) 删除数据元素ListDelete(L,i,e) 思路:先在单链表L中寻找到第i-1个结点*p,若结点存在,且也存在后继结点*q,则删除该后继结点。 bool ListDelete(LinkList *L,int i,ElemType e){ int j=0; LinkList *p=L,*q; while (ji-1 p!=NULL){ //查找第i-1个结点 j++; p=p-next; } if (p==NULL) return false; //未找到 else{ q=p-next; //q指向要删除的结点 if (q==NULL) false; //不存在后继结点 e=q-data; p-next=q-next; //从单链表中删除*q结点 free(q); //释放*q结点 return true; } } 【例2.5】假设有一个带头结点的单链表 L={ a1 , b1 , a2 , b2 , … , an , bn } 设计一个算法将其拆分成两个带头结点的单链表L1和L2,其中L1={ a1 , a2 , … , an },L2={ bn , bn-1 , … , b1 }。要求L1使用L的头结点。 L1 ∧ p … L2 头插法建表 尾插法建表 void split(LinkList *L,LinkList *L1,LinkList *L2) 【例2.6】设计一个算法,删除一个单链表L中元素值最大的节点。 L ∧ … … maxp maxpre L 5 3 8 ∧ 6 void delmaxnode(LinkList *L){ LinkList *p=L-next,*pre=L,*maxp=p,*maxpre=pre; while (p!=NULL) { //pre始终指向p的前驱节点 if (maxp-datap-data){ //找到一个更大的节点 maxp=p; //更改maxp maxpre=pre; //更改maxpre } pre=p; //p、pre同步后移一个节点 p=p-next; } maxpre-next=maxp-next; //删除*maxp节点 free(ma

文档评论(0)

kch + 关注
实名认证
内容提供者

教师资格证持证人

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

领域认证该用户于2023年10月08日上传了教师资格证

1亿VIP精品文档

相关文档