适合初学者代码
#include
#include
struct node
{
int data;
struct node *next;
struct node *prior;
};
typedef struct node *LinkList;
void create(LinkList head,LinkList tail,int n)//尾插法创建
{
LinkList p;
int i,a;
for(i=1;i<=n;i++)
{
p=(node *)malloc(sizeof(node));
scanf("%d",&a);
p->data=a;
p->next=NULL;
tail->next=p;
p->prior=tail;
tail=p;
}
printf("\n");
}
void insert(LinkList head,LinkList tail,int a,int i)//插入元素
{
LinkList t,p;
int j=1;
p=head->next;
while(jnext;
j++;
}
t=(node *)malloc(sizeof(node));
t->data=a;
t->next=p->next;
p->next->prior=t;
p->next=t;
t->prior=p->next->prior;
t=head->next;
while(t!=NULL)
{
printf("%d ",t->data);
t=t->next;
}
printf("\n");
}
void del(LinkList head,LinkList tail,int i)//删除元素
{
LinkList p,q;
p=head->next;
int j=1;
while(jnext;
j++;
}
q=p->next;
p->next=q->next;
q->prior=q->next->prior;
p=head->next;
while(p!=NULL)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void check(LinkList head,LinkList tail,int a)//查询元素
{
LinkList t;
t=head->next;
int flag=1;
while(t!=NULL)
{
if(t->data==a)
flag=0;
t=t->next;
}
if(flag==0)
printf("有\n");
else
printf("无\n");
}
int main(void)
{
LinkList head,tail;
tail=head=(node *)malloc(sizeof(node));
head->prior=NULL;
head->next=tail;
int n,a,t,i;
printf("创建链表输1\n插入输2\n删除输3\n查询输4\n结束输0\n");
while(1)
{
scanf("%d",&t);
if(t==1)
{
printf("输入链表长度\n");
scanf("%d",&n);
create(head,tail,n);
}
if(t==2)
{
printf("输入插入的元素及位置\n");
scanf("%d%d",&a,&i);
insert(head,tail,a,i);
}
if(t==3)
{
printf("输入删除元素的位置\n");
scanf("%d",&i);
del(head,tail,i);
}
if(t==4)
{
printf("输入查询的元素\n");
scanf("%d",&a);
check(head,tail,a);
}
if(t==0)
break;
}
return 0;
}