关于双向链表的问题
代码:#include <stdio.h>
#include <malloc.h>
typedef struct student
{
char name[20];
struct student *prior,*next;
}stud;
stud *create(int n)
{
int i;
stud *p,*h,*s;
h=(stud*)malloc(sizeof(stud));
h->name[0]='\0';
h->prior=NULL;
h->next=NULL;
p=h;
for(i=0;i<n;i++)
{
s=(stud*)malloc(sizeof(stud));
p->next=s;
printf("请输入第%d名学生的姓名:",i+1);
scanf("%s",s->name);
s->prior=p;
s->next=NULL;
p=s;
}
p->next=NULL; //循环完后最后一个结点的指向下一个结点的指针置空
return(h); //返回开始的头指针
}
stud *find(stud *h,char *x)
{
stud *p;
char *y;
p=h->next;
while(p)
{
y=p->name;
if(strcmp(y,x)==0)
return(p);
else
p=p->next;
}
printf("您所要删除的姓名不在此名单中:\n");
return 0;
}
void del(stud *p)
{
p->next->prior=p->prior;
p->prior->next=p->next;
free(p);
}
main()
{
int x;
int number;
char sname[20];
stud *head,*sp;
printf("\t\t练习088(练习A) 使用学生信息动态创建一个双链表\n");
printf("\n请输入要输入信息的学生人数:\n");
scanf("%d",&number);
printf("\n");
head=create(number);
sp=head->next;
printf("\n输入的学生姓名是:\n");
while(sp)
{
printf("%s ",sp->name);
sp=sp->next;
}
printf("\n\n是否要删除学生的姓名?(Y=0,N=1)");
scanf("%d",&x);
if(x==0)
{
printf("\n请输入要删除的学生的姓名:\n");
scanf("%s",&sname);
printf("\n");
sp=find(head,sname);
del(sp);
sp=head->next;
printf("现在的学生的名单是:\n");
while(sp)
{
printf("%s ",sp->name);
sp=sp->next;
}
}
else if(x==1)
{
sp=head->next;
printf("\n现在的学生的名单是:\n");
while(sp)
{
printf("%s ",sp->name);
sp=sp->next;
}
}
}
但是在执行删除的时候就是程序执行不下去,请问错误出在哪?
[ 本帖最后由 kknd84913 于 2013-1-28 16:09 编辑 ]