1.思维导图
2.单向循环链表的所有操作
创建
cs
loopLinkPtr create()
{
loopLinkPtr H=(loopLinkPtr)malloc(sizeof(loopLink));
if (NULL==H)
{
printf("创建失败\n");
return NULL;
}
H->len = 0;
H->next = H;
printf("创建成功\n");
return H;
}
输出结果:
判空
cs
int empty(loopLinkPtr H)
{
if(NULL == H)
{
printf("判空失败!\n");
return -1;
}
return H->len == 0;
//return H->next == H;
}
输出结果:
尾插
cs
int t_add(loopLinkPtr H, DataType e)
{
if(NULL == H)
{
printf("尾插失败!\n");
return 0;
}
loopLinkPtr p = (loopLinkPtr)malloc(sizeof(loopLink));
if(NULL == p)
{
printf("申请节点失败!\n");
return 0;
}
p->data = e;
p->next = NULL;
loopLinkPtr q = H;
while(q->next != H)
{
q = q->next;
}
q->next = p;
p->next = H;
H->len++;
show(H);
return 1;
}
输出结果:
遍历
cs
void show(loopLinkPtr H)
{
if(NULL == H || empty(H))
{
printf("遍历失败!\n");
return;
}
loopLinkPtr p = H;
for(int i=0; i<H->len; i++)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
}
输出结果:
尾删
cs
int t_del(loopLinkPtr H)
{
if (NULL==H||H->next==H)
{
printf("删除失败\n");
return 0;
}
loopLinkPtr p = H->next;
loopLinkPtr q = H;
while (p->next != H)
{
q = p;
p = p->next;
}
q->next = H;
free(p);
p=NULL;
H->len--;
show(H);
return 1;
}
输出结果:
销毁
cs
void a_free(loopLinkPtr H)
{
if(NULL == H)
{
printf("销毁失败\n");
return;
}
loopLinkPtr p=H->next;
while(p!=H)
{
loopLinkPtr q=p;
p=p->next;
free(q);
q=NULL;
}
free(H);
H=NULL;
printf("销毁完成\n");
return;
}
输出结果:
完整代码
looplink.c
cs
#include"looplink.h"
loopLinkPtr create()
{
loopLinkPtr H=(loopLinkPtr)malloc(sizeof(loopLink));
if (NULL==H)
{
printf("创建失败\n");
return NULL;
}
H->len = 0;
H->next = H;
printf("创建成功\n");
return H;
}
int empty(loopLinkPtr H)
{
if(NULL == H)
{
printf("判空失败!\n");
return -1;
}
return H->len == 0;
}
void show(loopLinkPtr H)
{
if(NULL == H || empty(H))
{
printf("遍历失败!\n");
return;
}
loopLinkPtr p = H;
for(int i=0; i<H->len; i++)
{
p = p->next;
printf("%d ",p->data);
}
printf("\n");
}
int t_add(loopLinkPtr H, DataType e)
{
if(NULL == H)
{
printf("尾插失败!\n");
return 0;
}
loopLinkPtr p = (loopLinkPtr)malloc(sizeof(loopLink));
if(NULL == p)
{
printf("申请节点失败!\n");
return 0;
}
p->data = e;
p->next = NULL;
loopLinkPtr q = H;
while(q->next != H)
{
q = q->next;
}
q->next = p;
p->next = H;
H->len++;
show(H);
return 1;
}
int t_del(loopLinkPtr H)
{
if (H == NULL||H->next == H)
{
printf("删除失败\n");
return 0;
}
loopLinkPtr p = H->next;
loopLinkPtr q = H;
while (p->next != H)
{
q = p;
p = p->next;
}
q->next = H;
free(p);
p=NULL;
H->len--;
show(H);
return 1;
}
void a_free(loopLinkPtr H)
{
if(NULL == H)
{
printf("销毁失败\n");
return;
}
loopLinkPtr p=H->next;
while(p!=H)
{
loopLinkPtr q=p;
p=p->next;
free(q);
q=NULL;
}
free(H);
H=NULL;
printf("销毁完成\n");
return;
}
looplink.h
cs
#ifndef __LOOPLINK_H__
#define __LOOPLINK_H__
#include<stdio.h>
#include<stdlib.h>
typedef int DataType;
typedef struct node
{
union
{
int len;
DataType data;
};
struct node *next;
}loopLink,*loopLinkPtr;
loopLinkPtr create();
int empty(loopLinkPtr H);
void show(loopLinkPtr H);
int t_add(loopLinkPtr H,DataType e);
int t_del(loopLinkPtr H);
void a_free(loopLinkPtr H);
#endif
main.c
cs
#include"looplink.h"
int main()
{
loopLinkPtr H=create();
printf("%d\n",empty(H));
t_add(H,50);
t_add(H,40);
t_add(H,30);
t_add(H,20);
t_add(H,10);
t_del(H);
t_del(H);
t_del(H);
t_del(H);
a_free(H);
}