1.loop_list.c
#include "loop_list.h"
//创建单向循环链表
loop_p creat_loop_list()
{
loop_p K = (loop_p)malloc(sizeof(loop_list));
if(K==NULL)
{
printf("空间申请成功\n");
}
K->len=0;
K->next=K;
return K;
}
//申请新结点
loop_p creat_node(datatype data)
{
loop_p new=(loop_p)malloc(sizeof(loop_list));
if(new==NULL)
{
printf("空间申请失败\n");
}
new->data=data;
return new;
}
//判空
int loop_empty(loop_p K)
{
if(K==NULL)
{
printf("链表为空\n");
return -1;
}
return K->next==NULL?1:0;
}
//头插
void insert_head(loop_p K,datatype data)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
loop_p new=creat_node(data);
new->next=K->next;
K->next=new;
K->len++;
}
//按位置插入
void insert_pos(loop_p K,datatype data,int pos)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
if(pos<=0||pos>K->len+1)
{
printf("位置不合理\n");
return;
}
loop_p temp = K;
for(int i=0;i<pos-1;i++)
{
temp=temp->next;
}
loop_p new=creat_node(data);
new->next=temp->next;
temp->next=new;
K->len++;
}
//输出
void out_put(loop_p K)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
loop_p temp=K->next;
/*for(int i=0;i<K->len;i++)
{
printf("%d->",temp->data);
temp=temp->next;
}*/
while(temp != K)
{
printf("%d->",temp->data);
temp=temp->next;
}
putchar(10);
}
//尾删
void del_tail(loop_p K)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
if(loop_empty(K))
{
printf("链表为空\n");
return;
}
loop_p temp=K;
while(temp->next->next !=K)
{
temp=temp->next;
}
loop_p del=temp->next;
temp->next=K;
free(del);
K->len--;
}
//按位置删除
void del_pos(loop_p K,int pos)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
if(loop_empty(K))
{
printf("链表为空\n");
return;
}
if(pos<=0||pos>K->len+1)
{
printf("位置不合理\n");
return;
}
loop_p temp = K;
for(int i=0;i<pos-1;i++)
{
temp=temp->next;
}
loop_p del=temp->next;
temp->next=temp->next->next;
free(del);
K->len--;
}
2.loop_list.h
#ifndef __LOOP_LIST_H__
#define __LOOP_LIST_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct loop_list
{
union
{
int len;
datatype data;
};
struct loop_list *next;
}loop_list,*loop_p;
//创建单向循环链表
loop_p creat_loop_list();
//创建结点
loop_p creat_node(datatype data);
//判空
int loop_empty(loop_p K);
//头插
void insert_head(loop_p K,datatype data);
//按位置插入
void insert_pos(loop_p K,datatype data,int pos);
//输出
void out_put(loop_p K);
//尾删
void del_tail(loop_p K);
//按位置删除
void del_pos(loop_p K,int pos);
#endif
2.main.c
#include "loop_list.h"
int main()
{
loop_p K=creat_loop_list();
insert_head(K,12);
insert_head(K,56);
insert_pos(K,45,2);
insert_pos(K,100,3);
out_put(K);
printf("-----------\n");
del_tail(K);
out_put(K);
printf("-----------\n");
del_pos(K,2);
out_put(K);
return 0;
}