这段我写的单链表的代码怎么实现不了功能?求教
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
struct node
{ int data;
struct node *next;
};
node *creat()
{ node *head,*p,*q;
int x,cycle=1;
head=(node*)malloc(sizeof(node));
head->next=NULL;
p=head;
while(cycle)
{
printf("\n请输入一个数:");
scanf("%d",&x);
if(x!=0)
{
q=(node*)malloc(sizeof(node));
q->data=x;
q->next=p->next;
p->next=q;
p=q;
}
else
cycle=0;
}
return head;
}
void export(node *head)
{ node *p;
for(p=head->next;p;p=p->next)
printf("%5d",p->data);
printf("\n");
}
node *search(node *head,int i)
{ node *p;
int j=0;
p=head;
while(j<i&&p->next)
{ p=p->next;
j++;
}
if(j==i)
return p;
else
return NULL;
}
node *search1(node*head,int x)
{ node *p;
p=head;
while(p->next&&p->next->data!=x)
p=p->next;
if(p->next)
return p->next;
else
return NULL;
}
void insert(node *head,int x)
{ node *p,*q;
int i,j=0;
printf("请输入插入的位置i:");
scanf("%d",&i);
p=head;
while(j<i-1&&p->next)
{ p=p->next;
j++;
}
if(j==i-1)
{
q=(node*)malloc(sizeof(node));
q->data=x;
q->next=p->next;
p->next=q;
}
else
printf("\n插入失败");
export(head);
}
void Delete(node *head,int i)
{ node *p,*q;
int j=0;
p=head;
while(p->next&&j<i-1)
{ p=p->next;
j++;
}
if(j==i-1)
{
q=p->next;
p->next=q->next;
free(q);
}
else
printf("\n无法删除");
export(head);
}
void Delete1(node *head,int x)
{
node *p,*q;
p=head;
while(p->next&&p->next->data!=x)
p=p->next;
if(p->next->data==x)
{
q=p->next;
p->next=q->next;
free(q);
}
else
printf("\n无法删除");
export(head);
}
void main()
{
node *head;
creat();
int i,x,chioce,chioce1,n,b,a,c;
printf("请选择:1->查找;2->插入;3->删除\n");
scanf("%d",&chioce);
if(chioce==1)
{
printf("请选择1,按位置;2,按值;\n");
scanf("%d",&chioce1);
if(chioce1==1)
{
printf("请输入查找的位置i:");
scanf("%d",&i);
search(head,i);
}
else
{
printf("请输入查找的值x:");
scanf("%d",&x);
search1(head,x);
}
}
else if(chioce==2)
{
printf("请输入插入的数为c:");
scanf("%d",&c);
insert(head,c);
}
else
{ printf("请选择:1->按位置;2->按值\n");
scanf("%d",&n);
if(n==1)
{
printf("请输入查找的位置b:\n");
scanf("%d",&b);
Delete(head,b);
}
else
{
printf("请输入查找的值a:\n");
scanf("%d",&a);
Delete1(head,a);
}
}
}