其他形式的链表——循环链表
循环链表
定义:循环链表是表中最后一个结点的指针指向头结点,使链表构成环状
特点:从表中任一结点发出均可找到表中其他结点,提高查找效率
双向循环链表
data:数据元素
prior:当前元素的前一个数据元素的地址
next:下一个数据元素的地址
双向循环链表定义
typedef struct dnode{
elementtype data;
struct dnode *prior,*next;
}dnode;
空双向循环链表
L->prior L->next
非空双向循环链表
p->prior->next=p=p->next->prior;
双向循环链表——删除操作
双向循环链表删除语句:
p->prior->next=p->next;
p->next->prior=p->prior
双向循环链表删除数据元素代码
void del_delist(dnode *p){
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}
双向循环链表删除操作时间复杂度:T(n)=O(1)
双向循环链表的插入操作
双向循环链表插入数据元素语句:
语句1:s->prior=p->prior;
语句2:p->prior->next=s;
语句3:s->next=p;
语句4:p->prior=s;
双向循环链表插入数据元素操作代码
void insert_list(dnode *p,int x){
s=(LinkList)malloc(sizeof(Dnode));
s->data=x;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
}