一、mian函数
cs
#include <stdio.h>
#include "./3.looplinklist.h"
int main(int argc, const char *argv[])
{
looplinklist* head = create_looplinklist();
insertHead_looplinklist(head,100);
insertHead_looplinklist(head,200);
insertHead_looplinklist(head,300);
show_looplinklist(head);
insertEnd_looplinklist(head,999);
insertEnd_looplinklist(head,888);
insertEnd_looplinklist(head,666);
show_looplinklist(head);
delHead_looplinklist(head);
show_looplinklist(head);
delEnd_looplinklist(head);
show_looplinklist(head);
insertByindex_looplinklist(head,2,55555);
show_looplinklist(head);
insertByindex_looplinklist(head,20,10086);
show_looplinklist(head);
delByindex_looplinklist(head,4);
show_looplinklist(head);
delByindex_looplinklist(head,16);
show_looplinklist(head);
return 0;
}
二、功能函数
cs
#include <stdio.h>
#include <stdlib.h>
#include "./3.looplinklist.h"
looplinklist* create_looplinklist()
{
looplinklist* head =(looplinklist*)malloc(sizeof(looplinklist));
if(NULL == head)
{
printf("头结点创建失败,链表创建失败\n");
return NULL ;
}
head->text.len = 0;
head->next= head;
return head;
}
//遍历
void show_looplinklist(looplinklist*head)
{
looplinklist*p=head;
while(p->next != head)
{
p=p->next;
printf("%d ",p->text.data);
}
printf("\n");
return ;
}
//头插
void insertHead_looplinklist(looplinklist*head,dataType num)
{
looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist));
if(NULL == temp)
{
printf("结点创建失败,头插失败\n");
return ;
}
temp->next = NULL ;
temp->text.data = num;
temp->next = head->next;
head->next = temp;
head->text.len++;
return ;
}
//尾插
void insertEnd_looplinklist(looplinklist*head,dataType num)
{
looplinklist* p =head;
while(p->next != head)
{
p=p->next;
}
looplinklist* temp = (looplinklist*)malloc(sizeof(looplinklist));
if(NULL == temp)
{
printf("结点创建失败,尾插失败\n");
return ;
}
temp->next = NULL ;
temp->text.data = num;
temp->next = head;
p->next = temp;
head->text.len++;
return ;
}
//判空
int isEmpty_looplinklist(looplinklist*head)
{
if(head->next == head)
{
return 1;
}
else
{
return 0;
}
}
//头删
void delHead_looplinklist(looplinklist*head)
{
if(isEmpty_looplinklist(head))
{
printf("链表为空\n");
return ;
}
looplinklist* temp =head->next;
head->next=head->next->next;
head->text.len--;
free(temp);
return;
}
//尾删
void delEnd_looplinklist(looplinklist*head)
{
if(isEmpty_looplinklist(head))
{
printf("链表为空\n");
return ;
}
looplinklist*p=head;
while(p->next->next != head)
{
p= p->next;
}
looplinklist*temp=p->next;
p->next = head;
head->text.len--;
free(temp);
return;
}
//按位置插入
void insertByindex_looplinklist(looplinklist*head,int index,dataType num)
{
if(index<1)
{
printf("位置非法,插入失败\n");
return ;
}
int i=1;
looplinklist*p=head;
for(i;i<(index%head->text.len);i++)
{
p=p->next;
}
looplinklist*temp = (looplinklist*)malloc(sizeof(looplinklist));
if(NULL == temp)
{
printf("结点申请失败,插入失败\n");
return ;
}
temp->text.data=num;
temp->next=p->next;
p->next = temp;
head->text.len++;
return ;
}
//按位置删除
void delByindex_looplinklist(looplinklist*head,int index)
{
if(index<1)
{
printf("位置非法,删除失败\n");
return ;
}
if(isEmpty_looplinklist(head))
{
printf("链表为空,无法进行删除\n");
return ;
}
int i=1;
looplinklist*p=head;
for(i;i<(index%head->text.len);i++)
{
p=p->next;
}
looplinklist*temp=p->next;
p->next=p->next->next;
free(temp);
head->text.len--;
return;
}
三、头文件
cs
#ifndef __looplink_H__
#define __looplink_H__
typedef int dataType;
union msg{
dataType data;
int len;
};
typedef struct node{
union msg text;
struct node* next;
}looplinklist;
looplinklist* create_looplinklist();
void insertHead_looplinklist(looplinklist*head,dataType num);
void show_looplinklist(looplinklist*head);
void insertEnd_looplinklist(looplinklist*head,dataType num);
void delHead_looplinklist(looplinklist*head);
void delEnd_looplinklist(looplinklist*head);
void insertByindex_looplinklist(looplinklist*head,int index,dataType num);
void delByindex_looplinklist(looplinklist*head,int index);
#endif