写一个函数建立一个有3名学生数据的单向动态链表,输出成员值。
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct Student) //LEN代表结构体类型的长度,用sizeof求出
struct Student //声明结构体类型
{
long num;
float score;
struct Student * next;
};
int n; //全局变量n
struct Student * creat(void) //定义返回指针值的函数,此函数返回一个指向链表头的指针
{
struct Student * head;
struct Student * p1, * p2; //定义指向struct Student类型数据的指针变量p
n = 0;
p1 = p2 =(struct Student * ) malloc(LEN); //开辟一个长度为LEN的内存区
scanf("%ld,%f", &p1->num, &p1->score);
head = NULL;
while (p1->num != 0)
{
n = n + 1;
if (n == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
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;
printf ("\nNow, These %d records are: \n", n);
p = head;
if (head != NULL)
do
{
printf("%ld %5.1f\n", p->num, p->score);
p = p->next;
}while(p != NULL);
}
int main()
{
struct Student * head;
head = creat(); //调用函数,返回链表第一个 节点的地址
print(head); //调用print函数
return 0;
}