/*动态从键盘读入学生的姓名和成绩,为每个学生建立一个节点,并将所有学生的信息构成一个链表*/
/*当用户输入0时,表示信息输入结束。然后程序输出链表中存放的学生信息,并在程序结束以前释放所有动态申请的空间*/
#include <iostream>
#include <string>
using namespace std;
struct StudentNode//定义结点的结构
{
char name[20];
float score;
StudentNode *next;
};
int main()
{
StudentNode *head=NULL;//链表表头结点
StudentNode *tail=NULL;//链表尾结点
char name[20];//存放临时有户名
float score;//存放临时成绩
while (1)
{
cout<<"Input the student name and score(0 to exit):"<<endl;
cin>>name;
if (name[0]=='0')//名字为0的时候退出
{
break;
}
cin>>score;
/* 创建一个新的结点,并将其变量赋值*/
StudentNode *pNew=new StudentNode;
strcpy(pNew->name,name);
pNew->score=score;
pNew->next=NULL;
if(tail==NULL)//如果链表为空,则当前结点成为链表头结点
head=pNew;
else //反之,当前结点插入到链表尾
tail->next=pNew;
tail=pNew;//新插入的结点成为链表的尾结点
}
StudentNode *pNode=head;//输出链表
while (pNode!=NULL)
{
cout<<pNode->name<<" "<<pNode->score;
pNode=pNode->next;
if (pNode!=NULL)
{
cout<<"-->";
}
}
while(head!=NULL)//释放堆空间
{
pNode=head;
head=head->next;
delete pNode;
}
return 0;
}