/************************************************************************************
用结构体和指针构造链表:
HEAD = p = (struct student *) malloc(LEN);的语句是用LEN读出将要开辟的新
单元所需的空间,然后由malloc();开辟一个新的空间并将新的空间的首地址返回。
注意:malloc函数返回的地址(指针)是(void)类型的,即不指向一个特定的类
型的对象,因此,对其返回值进行强制类型转换,即(struct student *)malloc(LEN),
使它能指向struct student 类型的数据。
**************************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>//用malloc函数开辟新单元时需用此头文件
#define LEN sizeof(struct student) //LEN代表struct student类型数据的长度
struct student //声明struct student类型
{
int num;
float score;
struct student *NEXT;//指针变量HEAD和p
};
int main()
{
int i,n;
struct student *HEAD,*p,*q;//定义struct student类型的指针变量
printf("Please Input:\t");
scanf("%d",&n); //输入链表的长度
HEAD = p = (struct student *) malloc(LEN);//开辟一个新单元并让p和HEAD指向它
scanf("%d%f",&p->num,&p->score); //输入第一个结点的数据
for(i=1;i<n;i++) //当链表的长度达到指定的长度时结束
{
q = (struct student *) malloc(LEN); //开辟第i个新单元,并让q指向它
scanf("%d%f",&q->num,&q->score); //输入第i个结点的数据
p->NEXT = q; //使第i-1个结点的成员NEXT指向第i个结点
p = q; //使p指向第i个结点
}
p->NEXT = NULL; //使最后个结点的NEXT成员不指向任何结点
printf("The information:\n");
for(p=HEAD;p!=NULL;) //当p不指向任何一个结点时结束循环
{
printf("%d\t%.2f\n",p->num,p->score); //输出当前结点的数据
p = p->NEXT; //使p指向下一个结点
}
return 0;
}