#include<iostream>
#include<iomanip>
using namespace std;
class score
{
public:
char name[10];
int num;
float math;
float chinese;
float english;
score *next;
};
score *head=NULL;
score *set()
{
int x;
score *p1,*p2;
p1=new score;
head=p1;
p2=p1;
cout<<"请输入人数:";
cin>>x;
for(int y=0;y<x;y++)
{
p1=new score;
p2->next=p1;
p2=p1;
cout<<"请输入姓名:";
cin>>p1->name;
cout<<"请输入学号:";
cin>>p1->num;
cout<<"请输入数学成绩:";
cin>>p1->math;
cout<<"请输入语文成绩:";
cin>>p1->chinese;
cout<<"请输入英语成绩:";
cin>>p1->english;
}
p2->next=NULL;
return head;
}
void show(score *p)
{
cout<<"姓名"<<setw(8)<<"学号"<<setw(8)<<"数学"<<setw(8)<<"语文"<<setw(8)<<"英语"<<endl;
while(p!=NULL)
{
cout<<p->name<<setw(8)<<p->num<<setw(8)<<p->math<<setw(8)<<p->chinese<<setw(8)<<p->english<<endl;
p=p->next;
}
}
void insert(score *p)
{
score *a=new score;
while(p->next!=NULL)
{
p=p->next;
}
p->next=a;
cout<<"请输入姓名:";
cin>>a->name;
cout<<"请输入学号:";
cin>>a->num;
cout<<"请输入数学成绩:";
cin>>a->math;
cout<<"请输入语文成绩:";
cin>>a->chinese;
cout<<"请输入英语成绩:";
cin>>a->english;
p=a;
p->next=NULL;
}
void empty(score *p)
{
int x;
score *a;
cout<<"请输入要删除成绩的学生学号"<<endl;
cin>>x;
while(p->num!=x&&p->next!=NULL)
{
a=p->next;
p=p->next;
}
if(p->num!=x)
{
cout<<"查无此人"<<endl;
}
if(p->num==x&&p->next!=NULL)
{
a=p->next;
delete p;
p=a;
cout<<"操作成功"<<endl;
}
if(p->next=NULL&&p->num==x)
{
delete p;
cout<<"操作成功"<<endl;
}
a=NULL;
}
int main()
{
head=set();
score *p=head->next;
show(p);
insert(p);
show(p);
empty(p);
show(p);
while(p!=NULL)
{
head=p;
p=p->next;
delete head;
}
return 0;
}
empty()函数用来删除数据的..不知道哪里出问题..就是执行不了...希望能把我思想误区一起说出来,我总感觉我链表哪里理解错误...小弟是初学者,如果有哪里怎么常识性错误,希望一起指出...拜托了..谢谢大家了..
按你说的那样改,在删除头一个节点时候,输入完会没反应了...
删除最后一个节点的时候会出现乱码..应该是我empty函数出问题吧...
按这样改后程序运行后如果删除第一个数据,会提示成功,但是下面会显示乱码..
删除最后一个数据,数据输出的时候还会保留删除掉的那个!
那就是你的链表操作有问题