《数据结构》循环链表双向链表_第1页
《数据结构》循环链表双向链表_第2页
《数据结构》循环链表双向链表_第3页
《数据结构》循环链表双向链表_第4页
《数据结构》循环链表双向链表_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现四、循环链表四、循环链表La1ai-1anaip从单链表中某结点从单链表中某结点p出发如何找到其前驱?出发如何找到其前驱?将单链表的首尾相接,将终端结点的指针域由空指针将单链表的首尾相接,将终端结点的指针域由空指针改为指向头结点,构成改为指向头结点,构成单循环链表单循环链表,简称,简称循环链表循环链表。循环链表中增设了表头结点,统一了空表循环链表中增设了表头结点,统一了空表和非空表的运算;和非空表的运算;说明说明L空循环链表空循环链表La1ai-1anai非空循环链表非空循环链表从循环链表中的任何一个结点的位置从循环链表中的

2、任何一个结点的位置都可以找到其他所有结点,而单链表做都可以找到其他所有结点,而单链表做不到;不到;说明说明La1ai-1anai循环条件:循环条件:p!=NULLp!=L p-next!=NULLp-next!=L循环链表中没有明显的尾端循环链表中没有明显的尾端 如何避免死循环如何避免死循环对循环链表,有时不给出头指针,而是对循环链表,有时不给出头指针,而是给出尾指针,可以更方便的找到线性表的给出尾指针,可以更方便的找到线性表的第一个元素和最后一个元素结点。第一个元素和最后一个元素结点。说明说明reara1ai-1anai如何查找开始结点和终端结点?如何查找开始结点和终端结点?开始结点:开始结

3、点:rear-next-next终端结点:终端结点:rear例如:将两个链表首尾相连:例如:将两个链表首尾相连:TaTaa a1 1a an nTbTbb b1 1b bn na a1 1a an nb b1 1b bn nTaTaTbTb循环链表与线性链表操作的主要差别是循环链表与线性链表操作的主要差别是算法中循环结束的条件。算法中循环结束的条件。说明说明H Hrearrear判空条件:判空条件:H=H-next;H=H-next;判空条件:判空条件:rear=rear=rearrear-next;-next;L Lnext=NULL;L-next=NULL;a a1 1a an nb b1

4、 1b bn npTaTaTbTbTaTaa a1 1a an nTbTbb b1 1b bn n举例举例a a1 1a an nb b1 1b bn npTaTaTbTbLinkList Connect(LinkList Ta,LinkList Tb)/假设假设A、B都是非空的单循环链表都是非空的单循环链表 /p p存表头结点存表头结点 /TbTb表头连结表头连结TaTa表尾表尾 /释放释放TbTb表头结点表头结点 /修改指针修改指针 return Tb;举例举例p=Ta-next;Ta-next=Tb-next-next;free(Tb-next); Tb-next=p; 2.3 线性表的

5、链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表如何求结点如何求结点p的直接前驱,时间性能?的直接前驱,时间性能?为什么可以快速求得结点为什么可以快速求得结点p的后继?的后继?如何快速求得结点如何快速求得结点p的前驱?的前驱?La1ai-1anaip 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表 特点:特点:有两个指针域,一个指向直接后继,另一有两个指针域,一个指向直接后继,另一 个指个指 向直接前趋。向直接前趋。LABCpriordatanext结点结构:结点结构:data:数据域,存储数据元素;数据域,存储数据元素;prior:指

6、针域,存储该结点的前趋结点地址;指针域,存储该结点的前趋结点地址;next:指针域,存储该结点的后继结点地址。指针域,存储该结点的后继结点地址。 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表typedef struct DuLNode ElemType data; struct DuLNode *prior; struct DuLNode *next;DuLNode, *DuLinkList;LABCLABCLABC非空的双向循环链表非空的双向循环链表非空的双向链表非空的双向链表d-next-prior=d-prior-next=d理解理解ACBn双向链

7、表的插入运算双向链表的插入运算sp 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表ACBsps-prior=p-prior;p-prior-next=s;s-next=p;p-prior=s; 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表n双向链表的插入运算双向链表的插入运算ACBsp 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表n双向链表的插入运算双向链表的插入运算ACBsp 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表s-prior=p-prior; s-next=p;p-prior-next=s;p-prior=s; n双向链表的插入运算双向链表的插入运算n双向链表的删除运算双向链表的删除运算 2.3 线性表的链式存储表示和实现线性表的链式存储表示和实现五、双向链表五、双向链表( (p-prior) )-next=p-next; ( (p-next) )-prior=p-prior; ai-1aipai结点结点p的指针是否需要修改?的指针是否需要修改?free(p); 几个特殊点的处理几个特殊点的处理l头指针的处理头指针的处理l非循环链表尾结点的指针域保持为非循环链表尾结点的指针域保持为NULLl循环链表尾

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论