#include"circle.h"
Plink get_head()
{
Plink L=malloc(sizeof(Link));
if(L==NULL)
{
printf("申请失败\n");
return NULL;
}
L->len=0;
L->next=L;
}
void head_insert(Plink L,int n)
{
if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
Plink t=malloc(sizeof(Link));
t->data=n;
t->next=L->next;
L->next=t;
L->len++;
}
void output(Plink L)
{
if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
Plink t=L;
int i;
for(i=0;i<L->len;i++)
{
t=t->next;
printf("%d\t",t->data);
}
printf("\n");
}
void tail_insert(Plink L,int n)
{ int i;
if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
Plink t=L;
Plink p=malloc(sizeof(Link));
for(i=0;i<L->len;i++)
{
t=t->next;
}
p->data=n;
p->next=L;
t->next=p;
L->len++;
}
void any_pos_insert(Plink L,int pos,int n)
{ if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
Plink t=L;
int i;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=n;
p->next=t->next;
t->next=p;
L->len++;
}
void head_del(Plink L)
{ if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
Plink q=L->next;
L->next=q->next;
free(q);
q=NULL;
L->len--;
}
void tail_del(Plink L)
{ if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
int i;
Plink t=L;
for(i=0;i<L->len-1;i++)
{
t=t->next;
}
Plink q;
q=t->next;
t->next=L;
free(q);
q=NULL;
L->len--;
}
void any_pos_del(Plink L,int pos)
{ if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
int i;
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink q=t->next;
t->next=q->next;
free(q);
q=NULL;
L->len--;
}
void des(Plink L)
{ if(L==NULL)
{
printf("空链表或链表不存在\n");
return;
}
int i;
Plink t=L->next;
Plink p;
while(t!=L)
{
p=t;
t=t->next;
free(p);
}
free(L);
L=NULL;
}
#include "circle.h"
int main(int argc, const char *argv[])
{ int i;
Plink L=get_head();
int a[6]={10,20,30,40,50,60};
/*
头插法
for(i=0;i<6;i++)
{
head_insert(L,a[i]);
}
output(L);
*/
//尾插法
for(i=0;i<6;i++)
{
tail_insert(L,a[i]);
}
output(L);
//任意位置插入
any_pos_insert(L,2,520);
output(L);
//头部删除
head_del(L);
output(L);
//尾删除
tail_del(L);
output(L);
//任意位置删除
any_pos_del(L,1);
output(L);
//销毁
des(L);
output(L);
return 0;
}
#ifndef _CIRCLE_H_
#define _CIRCLE_H_
#include<myhead.h>
typedef struct node
{
union
{
int len;
int data;
};
struct node *next;
}Link,*Plink;
Plink get_head();
void output(Plink L);
void head_insert(Plink L,int n);
void tail_insert(Plink L,int n);
void any_pos_insert(Plink L,int pos,int n);
void head_del(Plink L);
void tail_del(Plink L);
void any_pos_del(Plink L,int pos);
void des(Plink L);
#endif