1.思维导图
2.单向循环链表的所有操作
创建
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;//return H->next == H;
}
输出结果:
尾插
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;
}
输出结果:
遍历
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_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;
}
输出结果:
销毁
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
#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
#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
#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);
}