创建一个学生链表,进行链表的插入、删除、查找操作
#include <iostream>#include <string>
using namespace std;
struct student
{
int ID; //顺序
long number;//学号
string name;//学生姓名
string sex; //性别
int age; //年龄
float score; //成绩
student *next;
};
student *head;
student *Create() //创建链表:初始化(当学号为 '0'时停止)
{
student *p1;
student *p2;
p1=new student;
cin>>p1->number>>p1->name>>p1->sex>>p1->age>>p1->score;
head=NULL;
p2=p1;
while(p1->number!=0)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=new student;
cin>>p1->number>>p1->name>>p1->sex>>p1->age>>p1->score;
}
p2->next=NULL;
delete p1;
return(head);
}
int Length(student *head) //计算学生总数
{
int length=0;
while(head)
{
length++;
head=head->next;
}
return length;
}
void Search(student *head,long key)//按学号查找学生信息
{
student *p;
if(head==NULL)
{
cout<<endl<<"空表,不能查找。"<<endl;
return ;
}
if(head->number==key)
{
cout<<"你查找的学生的信息为:"<<endl;
cout<<"\t"<<"学号"<<"\t"<<"学生姓名"<<"\t"
<<"性别""\t"<<"年龄"<<"\t"<<"成绩"<<endl;
cout<<"\t"<<head->number<<"\t"<<head->name<<"\t\t"
<<head->sex<<"\t"<<head->age<<"\t"<<head->score<<endl;
return ;
}
for(p=head;p->next;p=p->next)
{
if(p->next->number==key)
{
cout<<"你查找的学生的学生信息为:\n";
cout<<"\t"<<"学号"<<"\t"<<"学生姓名"<<"\t"
<<"性别"<<"\t"<<"年龄"<<"\t"<<"成绩"<<endl;
cout<<"\t"<<p->next->number<<"\t"<<p->next->name<<"\t\t"
<<p->next->sex<<"\t"<<p->next->age<<"\t"<<p->next->score<<endl;
return ;
}
}
cout<<"\n\t没有学号为"<<" "<<key<<" 的学生。\n";
}
void Insert(student *&head,student *stu) //插入操作
{
if(head==NULL)
{
head=stu;
stu->next=NULL;
cout<<endl<<"插入成功";
return ;
}
if(head->number>stu->number)
{
stu->next=head;
head=stu;
cout<<endl<<"插入成功";
return ;
}
student *p=head;
while(p->next&&p->next->number<stu->number)
p=p->next;
stu->next=p->next;
p->next=stu;
cout<<endl<<"插入成功";
}
void Delete(student* &head,long number)//删除操作
{
student *p1;
if(!head)
{
cout<<"空表,不能进行删除操作。"<<endl;
return ;
}
if(head->number==number)
{
p1=head;
head=p1->next;
delete p1;
cout<<number<<" 号学生信息已经被删除。";
return ;
}
for(student *p2=head;p2->next;p2=p2->next)
{
if(p2->next->number==number)
{
p1=p2->next;
p2->next=p1->next;
delete p1;
cout<<number<<" 号学生信息已经被删除。"<<endl;
return ;
}
}
cout<<number<<" 不能找到。\n";
return ;
}
void Display(student *head) //显示链表信息
{
if(head==NULL)
{
cout<<"空表,不能输出"<<endl;
return ;
}
cout<<"\t"<<"顺序"<<"\t"<<"学号"<<"\t"<<"学生姓名"<<"\t"
<<"性别"<<"\t"<<"年龄"<<"\t"<<"成绩"<<endl;
int ID=1;
while(head)
{
head->ID=ID;
cout<<"\t"<<head->ID<<"\t"<<head->number<<"\t"<<head->name<<"\t\t"
<<head->sex<<"\t"<<head->age<<"\t"<<head->score<<endl;
head=head->next;
ID++;
}
}
void main()
{
long number,key;
char c;
char choice;
cout<<"操作序号1.由学号查询学生的信息2.插入一名学生信息。3.删除一名学生信息。";
cout<<endl<<"请输入学生链表学生的学号、学生姓名、性别、年龄、成绩(学号为'0'时结束)"<<endl;
head=Create(); //初始化学生成绩表
cout<<endl<<Length(head)<<"名学生的信息:\n";
Display(head);
for(;;)//for_start
{
loop:cout<<"\n是否执行操作(Y/N):";
cin>>c;
if(c=='y'||c=='Y')//if_start
{
cout<<"操作序号1.由学号查询学生的信息2.插入一名学生信息。3.删除一名学生信息。";
cout<<endl<<"请选择( 1 、2、 3 ):"; //选择一个序号并执行操作
cin>>choice;
switch(choice)//switch_start
{
case '1': //查找操作
cout<<"\n请输入你要查找的学号:";
cin>>key;
if(head==NULL)
{
cout<<"\n空表,不能查找\n";
goto loop ;
}
Search(head,key);
break;
case '2': //插入操作
student *in;
in=new student;
cout<<"\n输入你要插入的学号、学生姓名、性别、年龄、成绩:";
cin>>in->number>>in->name>>in->sex>>in->age>>in->score;
Insert(head,in);
cout<<endl<<Length(head)<<"名学生的信息:\n";
Display(head);
break;
case '3': //删除操作
cout<<"\n请输入你要删除的学生的学号:";
cin>>number;
Delete(head,number);
cout<<endl<<"\t"<<Length(head)<<"名学生的信息:\n";
Display(head);
break;
default:
cout<<"\n\t\t Error Selection .\n";
break;
}//End switch
}//End if
else break;
}//End for
}//end main