- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
循环链表中尾指针的应用 考虑如何实现将带有尾指针的两个循环论链表合并为一个? an A a2 a1 an a2 a1 B 带尾指针的循环链表 rear 31 48 15 57 22 如果插入与删除仅在链表的两端发生,可采用带表尾指针的循环链表结构。 在表尾插入,时间复杂性 O(1) 在表尾删除,时间复杂性 O(n) 在表头插入,相当于在表尾插入 在表头删除,时间复杂性 O(1) 2.3.3双向链表 双向链表是指在前驱和后继方向都能游历(遍历)的线性链表。 双向链表每个结点有两个指针域, 结构如下: 双向链表通常采用带头结点的循环链表形式。 前驱方向 ? ? 后继方向 prior data next 双向链表的C语言定义 typedef struct DuLNode { ElemType data; struct DuLNode *prior,*next; } DuLNode ,*DuLinkList; prior data next 空双向循环链表: 非空双向循环链表: L L A B p-prior-next == p == p-next-prior p-prior p-next p prior next 结点指向 双向链表中插入操作 s=(DuLNode *)malloc(sizeof(DuLNode )); s-element=x; s-prior=p-prior; p-prior-next=s; s-next=p; p-prior=s; x S b a P 双向链表的插入操作算法: Status ListInsert_DuL ( DuLinkList L, int i, ElemType e ) { if ( ! ( s = ( DuLinkList ) malloc ( sizeof ( DuLNode ) ) ) ) return ERROR s-data = e; // 将数据放入新结点的数据域 s-prior = p-prior; // 将 p 的前驱结点指针放入新结点的前向指针域 s-next = p; // 将 p 的放入新结点的反向指针域 p-prior-next = s; // 修改 p 的前驱结点的反向指针 p-prior = s; // 修改 p 的前向指针 return OK; } // ListInsert_DuL 算法评价:T(n)=O(n) 删除操作 b c a P p-prior-next=p-next; p-next-prior=p-prior; 双向链表的删除操作算法: Status ListDelete_DuL ( DuLinkList L, int i, ElemType e ) { // 删除带头结点的双向循环链表 L 中第 i 个元素并将元素值返回,1≤i≤表长 if ( ! ( p = GetElemP_DuL ( L, i ) ) ) return ERROR; // 在 L 中确定第 i 个元素,p 为指向该结点的指针; // 若 i 1 或 i 表长,则 p 为 NULL,第 i 个元素不存在 e = p-data; // 将 p 指向的结点数据域中的值取出 p-prior-next = p-next; // 修改 p 的前驱结点的反向指针 p-next-prior = p-prior; // 修改 p 的后继结点的前向指针 free (p); // 释放 p 结点 return OK; } // ListDelete_DuL 算法评价:T(n)=O(n) 顺序表与链表的比较 存取方式 顺序表可以随机存取,也可以顺序存取 链表是顺序存取的 插入/删除时移动元素个数 顺序表平均需要移动近一半元素 链表不需要移动元素,只需要修改指针 若插入/删除仅发生在表的两端,宜采用带尾指针的循环链表 考虑如何选择合适的存储结构? 静态链表 定义:用数组描述的链表叫静态链表 存储结构: #define MAXSIZE = 100; //静态链表的最大长度 typedef struct { ElemType data; int cur; //游标,代替指针指示结点在数组中的位置 } component,SLinkList[MAXSIZE]; 目的是为了在不设指针类型的高级程序设计语言中使用链表结构 1 zhao 2 qian 3 sun 4 li zhou 6 wu 7 zheng 8 wang 0 0 1 2 3 4 5 6 7 8 9 10 1 z
您可能关注的文档
最近下载
- 计算机视觉 第7章 摄像机成像模型.ppt VIP
- 2025年部编版新教材语文二年级上册第三单元教案设计.docx
- 宠物医院一例猫血栓诊治方案.pdf VIP
- 史铁生的课件.pptx VIP
- 2024-2025学年广东省深圳市南山育才集团九年级(上)期中语文试卷.doc VIP
- 北师大版七年级下册 第2章平行线 ---纸片翻折问题 专题练习(word版、含解析).docx VIP
- 2025-2026学年八年级数学上学期第一次月考01(江西专用,人教版2024八年级上册第十三章_第十四章)【含答案】.docx
- 介绍信 接洽函.docx VIP
- 2025年-2025秋形势与政策课件携手周边国家共创美好未来.pdf
- 第05讲 平行线中的翻折问题解题技巧(含解析)-2021-2022学年七年级数学下册常考点.pdf VIP
文档评论(0)