第2章 线性表单链表.pptVIP

  1. 1、本文档共27页,可阅读全部内容。
  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文档。上传文档
查看更多
第2章 线性表单链表

2.3.5 双向链表 单链表 插入算法: void ListInsert_Dul(DuLinkList L, DuLNode *p, DuLNode *e) { s-prior = p? prior; p? prior -next =s; s-next =p; p-prior = s; } 删除算法: void ListDelete_Dul(DuLinkList L, DuLNode *p, ElemTypee) { e=p-data; p -prior -next = p-next; p-next-prior = p- prior; delete p; } * * 2.3 线性表的链式表示和实现 现在讨论线性表的另一种存储表示 ━━ 链表,并以此来实现线性表类型的操作。在具体实现中,淡化了位序的概念。 一、单链表 二、结点和单链表的 C++语言描述 三、单链表的基本操作 四、单链表的创建操作 五、其它形式的链表 用一组地址任意的存储单元存放线性表中的数据元素。 一、单链表 以元素(数据元素的存储空间) + 指针(指示后继元素存储位置) = 结点 (表示数据元素 或 数据元素的存储空间) 以“结点的序列”表示线性表 ?? 称作链表 以线性表中第一个数据元素a1的存储地址作为线性表的地址,称作线性表的头指针。 头结点 a1 a2 … ... an ^ 头指针 头指针 有时为了操作方便,在第一个结点之前虚加一个“头结点”,以指向头结点的指针为链表的头指针。 空指针 线性表为空表时, 头结点的指针域为空 ? 数据域 指针域 typedef struct LNode { ElemType data; // 数据域 struct LNode *next; // 指针域 } LNode, *LinkList; 二、结点和单链表的描述 LinkList L; // L 为单链表的头指针 数据域data 指针域next L?next L?data 1、求 线性表的长度--统计链表中结点个数 L 21 18 30 75 42 56 ∧ p k 0 p 1 p 2 p 3 4 p 5 p p 6 三、单链表的基本操作 一边遍历链表一边进行统计k的个数,当遍历指针p为空时,k为线性表的长度。 p=L; k=0; while ( p ) { k++; p=p-next; } 注意: 由于各结点的地址不是连续的,因此指针p向后移动不能为p++ int ListLength_L( LinkList L ) { // L 为链表的头指针,本函数返回 L 所指链表的长度 p=L; k=0; while ( p ) { k++; p=p-next; // k 计非空结点数 }//while return k; } // ListLength_L 算法时间复杂度为: O(n) n为表长 2、查找元素操作 一边遍历链表一边比较给定值e与结点p的数据域值。查找结果有两种可能:找到时,返回第一个和值e 相等的数据结点指针p;找不到,返回空指针。 p p p e = 30 58 L 21 18 30 75 30 56 ∧ p p p p p p p p=L; while ( p-data != e ) p=p-next; if(p) cout“找到”;else cout“找不到”endl; p p的指向的结点是要找的结点 LNode* LocateElem_L( LinkList L, ElemType e ) { p=L; while ( p p-data != e ) p=p-next; return p; } // LocateElem_L 算法时间复杂度为: O(n) 3.插入结点操作 在p所指结点之前,插入已经生成的结点s。 思路: (1)确定p指针原来的前驱结点q位置。 从头遍历链表,确定前驱结点的指针q。

文档评论(0)

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

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

1亿VIP精品文档

相关文档