【C++】建立一个学生信息链表,每个结点包括:学号、姓名、成绩。【原创技术】
(2012-05-23 21:37:08)
标签:
c链表it |
分类: C加加开发 |
题目:
建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。
源代码:
建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。
源代码:
- //科目: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<<"1、创建结点信息"<<"\n"<<"2、查找结点信息"<<"\n"
- <<"3、显示结点信息"<<"\n"<<"4、删除结点信息\n"<<"5、退出程序"<<"\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;
- }
更多详细内容::::去学习

加载中…