第五讲 链表(二).pptVIP

  • 21
  • 0
  • 约5.16千字
  • 约 21页
  • 2018-02-24 发布于河南
  • 举报
第五讲 链表(二)

第五讲 线性表的链式存储(二) 2、4 循环链表 如果使单链表中最后一个结点的指针域指向头结点,整个链表就形成一个环,这样从链表中任一结点出发都可以找到其它结点,称这种链式存储结构为循环链表。 head … head 单循环链表结构图 循环链表的操作和单链表的操作基本一致。只是算法中循环条件不是判断p或者 p-next是否为NULL,而是判断它们是否等于头指针。 带头结点的循环链表为空的条件是: head-next=head 要想对链表中的每个结点进行处理,只需设一个“扫描”指针p,令其初始值为头结点的位置(p=head),然后反复执行 p=p-next 直到p==head为止。 例: 在一个带头结点的循环链表中,查找一个数据为x的结点,当查找成功时,返回该结点的指针;否则返回NULL。 Link Search(Link head,elemtype x) { p=head-next; while(p!=head) { if(p-data==x) return (p); p=p-next; } return (NULL); } 2、5 双向链表 一、双向链表的结构 双向链表就是链表中除数据域以外有两个指针域,一个指向结点的直接前驱,另一个指向结点的直接后继。结构如下 前驱指针域 数据域 后继指针域 双向链表的存储结构如下: typedef struct DulNode { elemtype data; struct DulNode *prior; struct DulNode *next; }DulNode,*DulLink; 双向链表一般也是由头指针唯一确定的。增加头结点能简化双向链表的某些操作。如果将双向链表中的头结点和尾结点链接起来,则形成双向循环链表。 head ... 双向链表 head … 双向循环链表 双向循环链表有一个固有特性,若p为指向双向链表中某结点的指针,则 p-next-prior==p==p-prior-next 二、双向链表的操作 1、双向链表前插操作 将数据为x 的新结点插入到双向链表上p所指的结点之前。 p s void Insert(DulLink head,DulLink p, elemtype x) { DulLink s; s=(DulLink)malloc(sizeof(struct DulNode)); s-data=x; s-prior=p-prior; s-next=p; p-prior-next=s; p-prior=s; } 2、双向链表删除操作 在双向链表上删除p 指针指向的结点。 p

文档评论(0)

1亿VIP精品文档

相关文档