数据结构-第二章线性表.ppt

  1. 1、本文档共62页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.3 线性表的链式表示和实现 ? 每个数据元素的两部分信息组合在一起被称为 结 点 ? 其中表示数据元素内容的部分被称为 数据域 ( data ) ? 表示直接后继元素存储地址的部分被称为 指针 或 指针域 ( next ) ? 单链表简化的图形描述形式 head a b c d ^ * 2.3 线性表的链式表示和实现 ? head 是头指针,它指向单链表中的第一个结点, 这是单链表操作的入口点 ? 由于最后一个结点没有直接后继结点,所以,它 的指针域放入一个特殊的值 NULL 。 NULL 值在图示 中常用( ^ )符号表示。 head a b c d ^ * 2.3 线性表的链式表示和实现 ? 为了简化对链表的操作,人们经常在链表的第一 个结点之前附加一个结点,并称为头结点。这样 可以免去对链表第一个结点的特殊处理。 head a b c d ^ * 2.3 线性表的链式表示和实现 ? 链式存储结构的特点 ( 1 )线性表中的数据元素在存储单元中的存放顺 序与逻辑顺序不一定一致; ( 2 )在对线性表操作时,只能通过头指针进入链 表,并通过每个结点的指针域向后扫描其余结点, 这样就会造成寻找第一个结点和寻找最后一个结 点所花费的时间不等。 * 2.3 线性表的链式表示和实现 ? 链式存储结构的类型定义: typedef struct LNode{ ElemType data; struct LNode *next; } LNode, *LinkList; * 2.3 线性表的链式表示和实现 * 2.3 线性表的链式表示和实现 ? 单链表的建立: * 2.3 线性表的链式表示和实现 ? 单链表的查找: * 2.3 线性表的链式表示和实现 ? 单链表的插入: * 2.3 线性表的链式表示和实现 ? 单链表的插入: 1. Status ListInsert_L(LinkList &L, int i, ElemType e) { // 算法 2.9 2. // 在带头结点的单链线性表 L 的第 i 个元素之前插入元素 e 3. LinkList p,s; 4. p = L; 5. int j = 0; 6. while (p && j < i-1) { // 寻找第 i-1 个结点 7. p = p->next; 8. ++j; 9. } 10. if (!p || j > i-1) return ERROR; // i 小于 1 或者大于表长 11. s = (LinkList)malloc(sizeof(LNode)); // 生成新结点 12. s->data = e; s->next = p->next; // 插入 L 中 13. p->next = s; 14. return OK; 15. } // LinstInsert_L * 2.3 线性表的链式表示和实现 ? 单链表的删除: * 2.3 线性表的链式表示和实现 单 链 表 的 删 除 1. Status ListDelete_L(LinkList &L, int i, ElemType &e) { // 算法 2.10 2. // 在带头结点的单链线性表 L 中,删除第 i 个元素,并由 e 返回其值 3. LinkList p,q; 4. p = L; 5. int j = 0; 6. while (p->next && j < i-1) { // 寻找第 i 个结点,并令 p 指向其前趋 7. p = p->next; 8. ++j; 9. } 10. if (!(p->next) || j > i-1) return ERROR; // 删除位置不合理 11. q = p->next; 12. p->next = q->next; // 删除并释放结点 13. e = q->data; 14. free(q); 15. return OK; ? } // ListDelete_L * 2.3 线性表的链式表示和实现 ? 循环链表 表中最后一个结点的指针域指向头结点,整 个链表形成一个环。 a 1 a 2 … ... a n 和单链表的差别在于,判别链表中最后一个结点 的条件不再是“后继是否为空”,而是“后继是 否为头结点”。 * 2.3 线性表的链式表示和实现 ? 双向链表 结点中有两个指针域,其一指向直接后继, 另一指向直接前趋。 typedef struct DuLNode{ ElemType data; struct DuLNode *prior; struct DuLNode *next; } DuLNode, *DuLi

文档评论(0)

懒懒老巢 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档