主题:[讨论]请大虾帮我分析一下程序那里错了
创建一个学生链表,输入数据时按学生的分数从小到大排序储存。
#include<iostream>
using namespace std;
//...................定义结构......................
struct student
{
char name[10];
int score;
student *next;
};
void charu(student *head,student *sample); //.........声明插入列表函数。
void shuchu(student *head);
//...................创建列表.......................
void create(student *head)
{
student *p2;
int i=1;
while(1)
{
cout<<"请输入第"<<i<<"位学生的名字:";
cin>>head->name;
cout<<"请输入该学生的分数:";
cin>>head->score;
if(head->score>=0&&head->score<=100)
break;
}
while(1)
{
i++;
p2=new student;
p2->next=NULL;
cout<<"请输入第"<<i<<"位学生的名字:";
cin>>p2->name;
cout<<"请输入该学生的分数:";
cin>>p2->score;
if(p2->score<0||p2->score>100)
break;
else
charu(head,p2); // ............调用插入列表函数
//shuchu(head);
}
}
//..........................定义插入列表函数(从小到大排列)......................
void charu(student *head,student *sample)
{
student *p1,*p2;
p1=head;
if(p1->next==NULL) //当列表只有1个学生数据时
{
if(p1->score>sample->score) //当表头的学生分数比插入的学生分数大时,插入的数据放在前面
{
sample->next=head;
//shuchu(sample);
//cout<<endl;
head=sample;
//cout<<5<<endl;
shuchu(head);
}
else
p1->next=sample; //当表头的学生分数比插入的学生分数小时,插入的数据放在后面
}
else
{
int count=0;
while(p1->score<sample->score)
{
if(p1->next==NULL) //当链表中的所有学生的分数都比插入的学生分数小时,
{
p1->next=sample; //插入的学生数据放在链表后.
break;
}
count=1;
p2=p1;
p1=p1->next;
}
if(count==1&&p1->next!=sample) //插入在列表中。
{
p2->next=sample;
sample->next=p1;
}
else if(count==0&&head->next!=sample)//当插入的学生分数比表头学生分数大时,放在链表头。
{
sample->next=head;
head=sample;
//shuchu(head);
//cout<<"********"<<endl;
}
}
}
//.........................输出列表........................
void shuchu(student *head)
{
student *p1;
p1=head;
while(p1!=NULL)
{
cout<<" 学生"<<p1->name<<"的分数为:"<<p1->score<<endl;
p1=p1->next;
}
}
int main()
{
student *xuesheng;
xuesheng=new student;
xuesheng->next=NULL;
create(xuesheng);
shuchu(xuesheng);
return 0;
}
哪位大虾帮我分析下哪里错了, 为什么?
#include<iostream>
using namespace std;
//...................定义结构......................
struct student
{
char name[10];
int score;
student *next;
};
void charu(student *head,student *sample); //.........声明插入列表函数。
void shuchu(student *head);
//...................创建列表.......................
void create(student *head)
{
student *p2;
int i=1;
while(1)
{
cout<<"请输入第"<<i<<"位学生的名字:";
cin>>head->name;
cout<<"请输入该学生的分数:";
cin>>head->score;
if(head->score>=0&&head->score<=100)
break;
}
while(1)
{
i++;
p2=new student;
p2->next=NULL;
cout<<"请输入第"<<i<<"位学生的名字:";
cin>>p2->name;
cout<<"请输入该学生的分数:";
cin>>p2->score;
if(p2->score<0||p2->score>100)
break;
else
charu(head,p2); // ............调用插入列表函数
//shuchu(head);
}
}
//..........................定义插入列表函数(从小到大排列)......................
void charu(student *head,student *sample)
{
student *p1,*p2;
p1=head;
if(p1->next==NULL) //当列表只有1个学生数据时
{
if(p1->score>sample->score) //当表头的学生分数比插入的学生分数大时,插入的数据放在前面
{
sample->next=head;
//shuchu(sample);
//cout<<endl;
head=sample;
//cout<<5<<endl;
shuchu(head);
}
else
p1->next=sample; //当表头的学生分数比插入的学生分数小时,插入的数据放在后面
}
else
{
int count=0;
while(p1->score<sample->score)
{
if(p1->next==NULL) //当链表中的所有学生的分数都比插入的学生分数小时,
{
p1->next=sample; //插入的学生数据放在链表后.
break;
}
count=1;
p2=p1;
p1=p1->next;
}
if(count==1&&p1->next!=sample) //插入在列表中。
{
p2->next=sample;
sample->next=p1;
}
else if(count==0&&head->next!=sample)//当插入的学生分数比表头学生分数大时,放在链表头。
{
sample->next=head;
head=sample;
//shuchu(head);
//cout<<"********"<<endl;
}
}
}
//.........................输出列表........................
void shuchu(student *head)
{
student *p1;
p1=head;
while(p1!=NULL)
{
cout<<" 学生"<<p1->name<<"的分数为:"<<p1->score<<endl;
p1=p1->next;
}
}
int main()
{
student *xuesheng;
xuesheng=new student;
xuesheng->next=NULL;
create(xuesheng);
shuchu(xuesheng);
return 0;
}
哪位大虾帮我分析下哪里错了, 为什么?