1】思维导图
2】完成单向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】
创建:
LooplinkPtr caerte()
{
LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
if(NULL==h)
{
printf("创建失败\n");
return NULL;
}
h->len=0;
h->data=0;
h->next=h;
printf("创建成功\n");
return h;
}
判空:
int empt(LooplinkPtr h)
{
if(NULL==h)
{
printf("判空失败\n");
return -1;
}
return h->next==h;
}
尾插:
void Tail_Add(LooplinkPtr h,DataType a)
{
if(NULL==h)
{
printf("尾插失败\n");
return ;
}
LooplinkPtr p=node_caerte(a);
LooplinkPtr p1=h;
while(p1->next!=h)
{
p1=p1->next;
}
p1->next=p;
p->next=h;
h->len++;
return;
}
遍历:
void show(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("打印失败\n");
return ;
}
LooplinkPtr p=h;
while(p->next!=h)
{
p=p->next;
printf("%d->",p->data);
}
putchar(10);
return ;
}
尾删:
void Tail_Del(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("尾删失败\n");
return ;
}
LooplinkPtr p=h;
for(int i=0;i<h->len-1;i++)
{
p=p->next;
}
LooplinkPtr temp=p->next;
p->next=h;
h->len--;
free(temp);
temp=NULL;
return ;
}
销毁:
void My_free(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("销毁失败\n");
return ;
}
for(int i=0;i<h->len;i++)
{
Tail_Del(h);
}
free(h);
printf("销毁成功\n");
return ;
}
运行截图:
源码:
#include"Looplink.h"
LooplinkPtr caerte()
{
LooplinkPtr h=(LooplinkPtr)malloc(sizeof(Looplink));
if(NULL==h)
{
printf("创建失败\n");
return NULL;
}
h->len=0;
h->data=0;
h->next=h;
printf("创建成功\n");
return h;
}
int empt(LooplinkPtr h)
{
if(NULL==h)
{
printf("判空失败\n");
return -1;
}
return h->next==h;
}
LooplinkPtr node_caerte(DataType a)
{
LooplinkPtr p=(LooplinkPtr)malloc(sizeof(Looplink));
if(NULL==p)
{
printf("创建失败\n");
return NULL;
}
p->data=a;
return p;
}
void Tail_Add(LooplinkPtr h,DataType a)
{
if(NULL==h)
{
printf("尾插失败\n");
return ;
}
LooplinkPtr p=node_caerte(a);
LooplinkPtr p1=h;
while(p1->next!=h)
{
p1=p1->next;
}
p1->next=p;
p->next=h;
h->len++;
return;
}
void show(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("打印失败\n");
return ;
}
LooplinkPtr p=h;
while(p->next!=h)
{
p=p->next;
printf("%d->",p->data);
}
putchar(10);
return ;
}
void Tail_Del(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("尾删失败\n");
return ;
}
LooplinkPtr p=h;
for(int i=0;i<h->len-1;i++)
{
p=p->next;
}
LooplinkPtr temp=p->next;
p->next=h;
h->len--;
free(temp);
temp=NULL;
return ;
}
void My_free(LooplinkPtr h)
{
if(NULL==h||empt(h))
{
printf("销毁失败\n");
return ;
}
for(int i=0;i<h->len;i++)
{
Tail_Del(h);
}
free(h);
printf("销毁成功\n");
return ;
}
3】完成双向循环链表的所有操作 【创建、判空、尾插、遍历、尾删、销毁】(与单向循环链表相似)
创建:
Loop_double_linkPtr caerte()
{
Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
if(NULL==h)
{
printf("创建失败\n");
return NULL;
}
h->len=0;
h->data=0;
h->next=h;
h->proir=h;
printf("创建成功\n");
return h;
}
判空:
int empt(Loop_double_linkPtr h)
{
if(NULL==h)
{
printf("判空失败\n");
return -1;
}
return h->next==h;
}
尾插:
void Tail_Add(Loop_double_linkPtr h,DataType a)
{
if(NULL==h)
{
printf("尾插失败\n");
return ;
}
Loop_double_linkPtr p=node_caerte(a);
Loop_double_linkPtr p1=h;
while(p1->next!=h)
{
p1=p1->next;
}
p->next=h;
p->proir=p1;
h->proir=p;
p1->next=p;
h->len++;
return;
}
遍历:
void show(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("打印失败\n");
return ;
}
Loop_double_linkPtr p=h;
while(p->next!=h)
{
p=p->next;
printf("%d->",p->data);
}
putchar(10);
return ;
}
尾删:
void Tail_Del(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("尾删失败\n");
return ;
}
Loop_double_linkPtr p=h;
for(int i=0;i<h->len-1;i++)
{
p=p->next;
}
Loop_double_linkPtr temp=p->next;
p->next=h;
h->proir=p;
h->len--;
free(temp);
temp=NULL;
return ;
}
销毁:
void My_free(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("销毁失败\n");
return ;
}
for(int i=0;i<h->len;i++)
{
Tail_Del(h);
}
free(h);
printf("销毁成功\n");
return ;
}
运行截图:
附源码:
#include"Loopdoublelink.h"
Loop_double_linkPtr caerte()
{
Loop_double_linkPtr h=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
if(NULL==h)
{
printf("创建失败\n");
return NULL;
}
h->len=0;
h->data=0;
h->next=h;
h->proir=h;
printf("创建成功\n");
return h;
}
int empt(Loop_double_linkPtr h)
{
if(NULL==h)
{
printf("判空失败\n");
return -1;
}
return h->next==h;
}
Loop_double_linkPtr node_caerte(DataType a)
{
Loop_double_linkPtr p=(Loop_double_linkPtr)malloc(sizeof(Loop_double_link));
if(NULL==p)
{
printf("创建失败\n");
return NULL;
}
p->data=a;
p->next=NULL;
p->proir=NULL;
return p;
}
void Tail_Add(Loop_double_linkPtr h,DataType a)
{
if(NULL==h)
{
printf("尾插失败\n");
return ;
}
Loop_double_linkPtr p=node_caerte(a);
Loop_double_linkPtr p1=h;
while(p1->next!=h)
{
p1=p1->next;
}
p->next=h;
p->proir=p1;
h->proir=p;
p1->next=p;
h->len++;
return;
}
void show(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("打印失败\n");
return ;
}
Loop_double_linkPtr p=h;
while(p->next!=h)
{
p=p->next;
printf("%d->",p->data);
}
putchar(10);
return ;
}
void Tail_Del(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("尾删失败\n");
return ;
}
Loop_double_linkPtr p=h;
for(int i=0;i<h->len-1;i++)
{
p=p->next;
}
Loop_double_linkPtr temp=p->next;
p->next=h;
h->proir=p;
h->len--;
free(temp);
temp=NULL;
return ;
}
void My_free(Loop_double_linkPtr h)
{
if(NULL==h||empt(h))
{
printf("销毁失败\n");
return ;
}
for(int i=0;i<h->len;i++)
{
Tail_Del(h);
}
free(h);
printf("销毁成功\n");
return ;
}