这是我最新的修改,但我知道还是有不少问题,麻烦你啦~
#include<stdio.h>structstudent{intnum;floatscore;structstudent*next;};structstudenta,...
#include<stdio.h>
struct student
{
int num;
float score;
struct student *next;
};
struct student a,b,c,*head,*p,*p1,*p2;
int main()
{
int m;
a.num=10101;a.score=89.5;
b.num=10103;b.score=90;
c.num=10107;c.score=85;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
printf("请输入一个要删除的号码");
scanf("%d",&m);
p1=head;p2=p1->next;
if(head->num==m) head=p2;
while(p1->num!=m&&p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(p1->num==m&&p1->next!=NULL)
p2->next=p1->next;
else p2->next=NULL;
p=head;
if(head!=NULL)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
return 0;
} 展开
struct student
{
int num;
float score;
struct student *next;
};
struct student a,b,c,*head,*p,*p1,*p2;
int main()
{
int m;
a.num=10101;a.score=89.5;
b.num=10103;b.score=90;
c.num=10107;c.score=85;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
printf("请输入一个要删除的号码");
scanf("%d",&m);
p1=head;p2=p1->next;
if(head->num==m) head=p2;
while(p1->num!=m&&p1!=NULL)
{
p2=p1;p1=p1->next;
}
if(p1->num==m&&p1->next!=NULL)
p2->next=p1->next;
else p2->next=NULL;
p=head;
if(head!=NULL)
do
{
printf("%ld %5.1f\n",p->num,p->score);
p=p->next;
}
while(p!=NULL);
return 0;
} 展开
1个回答
展开全部
看一下注释,再试试吧
int main()
{
int m;
a.num=10101;a.score=89.5;
b.num=10103;b.score=90;
c.num=10107;c.score=85;
head=&a;
a.next=&b;
b.next=&c;
c.next=NULL;
p=head;
while(p!=NULL)//虽然你这里能确保head不是NULL,但从习惯角度出发,这样写才更安全,而do...while();时,若head是NULL,会出现异常。 这句属于吹毛求疵
{
printf("%d %5.lf\n",p->num,p->score);
p=p->next;
}
printf("input a number to delete: ");
scanf("%d",&m);
p1=head;p2=p1->next;
while(p1!=NULL && p1->num!=m ) //---应该先判断p1是不是NULL,不然,会出现异常
{
p2=p1;p1=p1->next;
}
if ( p1==NULL )//----没有找到m时,p1=NULL,这时,什么都不做
;
else if(head->num==m) //如果m在头上,换头结点
head=p2;
else
p2->next=p1->next; //否则,换p2的后继结点
p=head; //这里在输出前,p要指向head
while(p!=NULL) //先检查是否为NULL,不是才进入循环
{
printf("%d %5.lf\n",p->num,p->score);
p=p->next;
}
return 0;
}
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询