【C++】创建一个学生信息链表,每一个结点包括:学号、姓名、成绩。【原创技术】


 

题目:
创建一个学生信息链表,每一个结点包括:学号、姓名、成绩。实现链表的创建、显示和查询。查询是指输入一个学号,若是链表中存在该学号的的结点,则显示此结点的数据。
源代码:php


//科目:C++实验3
//题目:创建一个学生信息链表,每一个结点包括:学号、姓名、成绩。
//语言:C++
//做者:武叶
//创做时间:2012年3月20日
#include <iostream>
using namespace std;
static int N=0; //定义N记录学生人数
/****定义结构体类型****/
typedef struct Node
{
int num;
char name[10];
float score;
struct Node *next;
}stNode;
/******初始化链表*******/
stNode * initlist()
{
struct Node *head; //定义头指针
struct Node *p1,*p2;
p1=p2=new Node; //使p1,p2指向新的结点
cout<<"请按学号姓名成绩依次输入:"<<"\n";
cin>>p1->num;cin>>p1->name;cin>>p1->score;
head=NULL;
while(p1->num!=0)
{ //输入学号以0结束
N++; //学生记录加1
if(N==1)
head=p1;
else
p2->next=p1;
p2=p1; //使p1指向结点尾
p1=new Node; //申请新的结点,存放下个记录
cin>>p1->num; cin>>p1->name;cin>>p1->score;
}
p2->next=NULL;
return(head); //返回头指针
}
/************显示链表内容*********/
void dispStLink(struct Node *head)
{
struct Node *p;
p=head;
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"成绩"<<"\n";
for(int i=0;i<=20;i++)
{
cout<<p->num<<"\t"<<p->name<<"\t"<<p->score<<"\t"<<"\n"; p=p->next;
}
}
/*******查找结点*********/
stNode *search(struct Node *head,int number)
{
int k=0,j=N;
struct Node *p3;
p3=head;
while(j!=0){
if(p3->num==number)
{
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"成绩"<<"\n"<<endl;
cout<<p3->num<<"\t"<<p3->name<<"\t"<<p3->score<<"\t"<<"\n";
}
else
p3=p3->next;
k++; //k记录链表中不等于查找学号的个数
j--;
}
if(k==N) {cout<<"对不起,没有该学号的信息"<<"\n"<<"\n";}
return 0;
}
/********删除结点*********/
stNode * del(struct Node *head)
{
int num2,k=N;
struct Node *p4,*p5;
cout<<"请输入删除学生信息的学生学号:num=";cin>>num2;
p4=head;
while(num2!=p4->num&&p4->next!=NULL)
{ //没有删除结点的信息且指针不在结尾
p5=p4;
p4=p4->next;
} //指针后移
if(num2==p4->num)
{
if(p4==head)
head=p4->next;
else
p5->next=p4->next;
cout<<"删除的学生信息为:"<<"\n";
cout<<"学号"<<"\t"<<"姓名"<<"\t"<<"\t"<<"成绩"<<"\n"<<endl;
cout<<p4->num<<"\t"<<p4->name<<"\t"<<p4->score<<"\t"<<"\n";
cout<<"删除成功"<<"\n";
N=N-1; //使总纪录数减1
}
else
{
cout<<"无此学生的结点"<<"\n";
}
return(head);
}
/**********建立结点**********/
int createStLink(struct Node *head,struct Node *stu)
{
struct Node *p6,*p7,*p8;
p7=head;
p6=stu;
if(head==NULL)
{
head=p6;p6->next=NULL;
}
else
{ //若是链表为空则在头结点建立信息
while(p6->num > p7->num && p7->next!=NULL)
{
p8=p7;
p7=p7->next;
}
if(p6->num<=p7->num)
{
if(head==p7)
head=p6;
else
p8->next=p6;
p6->next=p7;
}
else
{
p7->next=p6;p6->next=NULL;
}
}
N++;
return 1;
}
int main()
{
struct Node *H,*stud;
char M;
int num1;
H=initlist();
/******创建菜单*****/
while(M!='5')
{
if(H==NULL)
return 0;
else
{
cout<<"*********************************"<<"\n";
cout<<"一、建立结点信息"<<"\n"<<"二、查找结点信息"<<"\n"
<< "三、显示结点信息"<<"\n"<<"四、删除结点信息\n"<<"五、退出程序"<<"\n";
cout<<"*********************************"<<"\n";
cin>>M;
switch(M)
{
case '1':
cout<<"请按学号姓名成绩依次输入:"<<"\n";
case '2':
cout<<"请输入要查找结点信息的学号:"<<"num=";
cin>>num1;
search(H,num1);
break;
case '3':
cout<<"全部学生信息以下:\n";
dispStLink(H);
break;
case '4':
H=del(H);
if(H==NULL)
cout<<"链表中没有学生结点信息了"<<"\n";
break;
stud=new Node;
cin>>stud->num;
cin>>stud->name;
cin>>stud->score;
createStLink(H,stud);
dispStLink(H);
break;
}
}
}
cout<<"退出成功!"<<"\n";
return 0;
}
 ios

更多详细内容::::去学习ide