#include"double.h"
Plink get_head()
{
Plink L=malloc(sizeof(Link));
if(L==NULL)
{
printf("创建失败\n");
return NULL;
}
L->len=0;
L->next=NULL;
L->pro=NULL;
}
void head_input(Plink L,int n)
{
if(L==NULL)
{
printf("链表不存在\n");
return;
}
Plink t =malloc(sizeof(Link));
t->data=n;
if(L->next==NULL)
{
t->next=NULL;
t->pro=L;
L->next=t;
}
else
{
t->next=L->next;
t->pro=L;
L->next->pro=t;
L->next=t;
}
L->len++;
}
void output(Plink L)
{
if(L==NULL||L->len<=0)
{
printf("链表为空或不存在\n");
return;
}
int i;
Plink t=L;
for(i=0;i<L->len;i++)
{
t=t->next;
printf("%d\t",t->data);
}
printf("\n");
}
void tail_input(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=NULL;
p->pro=t;
t->next=p;
L->len++;
}
void any_pos_insert(Plink L,int pos,int n)
{ int i;
if(L==NULL)
{
printf("链表为空或不存在\n");
return;
}
Plink t=L;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink p=malloc(sizeof(Link));
p->data=n;
p->next=t->next;
p->pro=t;
t->next=p;
L->len++;
}
void head_del(Plink L)
{ if(L==NULL)
{
printf("链表为空或不存在\n");
return;
}
Plink t=L->next;
Plink q=t->next;
{
L->next=q;
q->pro=L;
free(t);
t=NULL;
}
L->len--;
}
void any_pos_del(Plink L,int pos)
{
if(L==NULL)
{
printf("链表为空或不存在\n");
return;
}
Plink t=L;
int i;
for(i=0;i<pos-1;i++)
{
t=t->next;
}
Plink q=t->next;
t->next=q->next;
q->next->pro=t;
free(q);
q=NULL;
L->len--;
}
void des(Plink L)
{
if(L==NULL)
{
printf("链表为空或不存在\n");
return;
}
Plink t=L->next;
Plink q;
while(t!=NULL)
{
q=t;
t=t->next;
free(q);
}
free(L);
L=NULL;
printf("销毁成功\n");
}
#include "double.h"
int main(int argc, const char *argv[])
{
Plink L=get_head();
int i;
int a[6]={10,20,30,40,50,60};
/*头插法
for(i=0;i<6;i++)
{
head_input(L,a[i]);
}
output(L);
*/
//尾插法
for(i=0;i<6;i++)
{
tail_input(L,a[i]);
}
output(L);
any_pos_insert(L,2,1000);
output(L);
head_del(L);
output(L);
any_pos_del(L,1);
output(L);
des(L);
output(L);
return 0;
}
#ifndef _DOUBLE_H_
#define _DOUBLE_H_
#include<myhead.h>
typedef struct node
{
union
{
int len;
int data;
};
struct node *next;
struct node *pro;
}Link,*Plink;
Plink get_head();
void head_input(Plink L,int n);
void output(Plink L);
void tail_input(Plink L,int n);
void any_pos_insert(Plink L,int pos,int n);
void head_del(Plink L);
void any_pos_del(Plink L,int pos);
void des(Plink L);
#endif