#include<stdio.h>
#include<math.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#define len sizeof(struct student)
using namespace std;
struct student
{
long num;
float score;
struct student *next; //声明一个指针变量 其中的 这个用structure student 定义 用next 储存 地址...........
};
using namespace std;
int n;
struct student *creat() //开辟一个新节点,
{
struct student *p1,*p2,*head;
n=0;
p1=p2=(struct student *)malloc(len); //开辟一个长度为 len的 空间 用强制转换类型 获得它的首地址.....
scanf("%ld%f",&p1->num,&p1->score); //
head=NULL; //
while(p1->num!=0) // 约定学好不为0....
{
n++;
if(n==1) //这是第一个节点 所以
head=p1; // 让head 记录下来头结点的地址....
else
p2->next=p1; // //让上一次开辟的 next部分储存起来 刚才开辟的 p1的地址....
p2=p1; // p2 和head 都和p1相同.... //将刚才开辟的 空间的首地址 赋予p2 (方便下一次又开辟的空间的首地址 向 刚才开辟的位置存放....)
p1=(struct student *)malloc(len);//在此开辟一个新空间 p1 从原来的地址变成了现在的地址........
scanf("%ld %f",&p1->num,&p1->score); //然后就要返回检查学号了.
}
p2->next=NULL;
return head;
}
void print(struct student *head)
{
struct student *p;
p=head;
if(head!=NULL)
{
do
{
printf("%ld%5.1f\n",p->num,p->score);
p=p->next;
}while(p!=NULL);
}
}
void main()
{
struct student *head;
head=creat();
print(head);
}