一、循环链表
- 什么是循环链表?
最后一个结点的链接又指回头结点(第一个结点)的链表,整个链表形成一个环。与单链表相比,操作时判断最后一个结点的条件为:结点的链接是否为头结点
- 空表
条件:L->next==L
- 非空表
条件 p->next==L
二、双向链表
-什么是双向链表?
用两个链接表示元素间的逻辑关系,其一指向直接后继,其二指向直接前驱。
- 算法描述
typedef struct DuLNode{
Elem Type data;
struct DuLNode *prior;
struct DuLNode *next;
}DulNode, *DuLinkList;
- 空表
条件:L->next==NULL且L->prior==NULL
- 非空表
条件:L->prior==NULL且p->next==NULL
(1)双向链表的插入算法
实现在双向链表中的第i个结点前插入一个结点
分析:
先找到第i-1个结点,p指向它;改变第i-1个结点的后继指针,第i个结点的前驱指针;同时还要改变要插入结点的前驱和后继指针。
- 图示:
s->next = p->next
s->next->prior=s
p->next=s
s->prior=p
(2)双向链表的删除算法
实现在双向链表中删除第i个结点
分析
先找到第i-1个结点,p指向它;改变第i-1个结点的后继指针指向第i+1个结点;同时还要改变第i+1个结点的前驱指针指向第i-1个结点
图示:
p->next = p->next->next
p->next->prior = p
时间: 2024-10-18 15:55:00