其他形式的链表——循环链表
循环链表
定义:循环链表是表中最后一个结点的指针指向头结点,使链表构成环状
 特点:从表中任一结点发出均可找到表中其他结点,提高查找效率
双向循环链表

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;
}



















![[ 云计算 华为云 ] 华为云开天 aPaaS:构建高效的企业数字化平台(下)](https://img-blog.csdnimg.cn/img_convert/721ffe589e0c64aa061b6f318d09a0e7.png)