#include "loopdouble.h"
//创建
loopdoublePtr create()
{
loopdoublePtr H = (loopdoublePtr)malloc(sizeof(loopdouble));
if(NULL==H)
{
printf("创建失败\n");
return NULL;
}
H->prior=H;
H->next=H;
H->len=0;
printf("创建成功\n");
return H;
}
//判空
int empty(loopdoublePtr H)
{
if(NULL==H)
{
printf("判空失败\n");
return -1;
}
return H->next==H;
}
//尾插
int tail_add(loopdoublePtr H,DataType e)
{
if(NULL==H)
{
printf("尾插失败\n");
return 0;
}
loopdoublePtr p = (loopdoublePtr)malloc(sizeof(loopdouble));
if(NULL==p)
{
printf("申请失败\n");
return 0;
}
p->data=e;
p->prior=NULL;
p->next=NULL;
loopdoublePtr q = H;
while(q->next!=H)
{
q=q->next;
}
p->prior=q;
p->next=H;
q->next=p;
H->prior=p;
H->len++;
return 1;
}
//遍历
void show(loopdoublePtr H)
{
if(NULL==H)
{
printf("遍历失败\n");
return;
}
loopdoublePtr p = H;
while(p->next!=H)
{
p=p->next;
printf("%d ",p->data);
}
printf("\n");
return;
}
//尾删
int tail_del(loopdoublePtr H)
{
if(NULL==H)
{
printf("插入失败\n");
return 0;
}
loopdoublePtr p = H;
while(p->next!=H)
{
p=p->next;
}
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
p=NULL;
H->len--;
return 1;
}
//销毁
void free_loopdouble(loopdoublePtr H)
{
if(NULL==H)
{
printf("销毁失败\n");
return;
}
loopdoublePtr p = H;
while(p->next!=H)
{
tail_del(H);
}
free(H);
H=NULL;
printf("销毁成功\n");
return;
}
数据结构 7.9 双向循环链表
最新推荐文章于 2024-07-14 16:24:46 发布