//用指针处理链表
//建立一个简单的链表,它由3个学生数据的结点组成,要求输出各结点中的数据
/*#include <stdio.h>
struct Student
{
int num;
float score;
struct Student *next;
};
int main()
{
struct Student a,b,c,*head,*p;
a.num = 10101;
a.score = 89.5;
b.num = 10103;
b.score = 90;
c.num = 10107;
c.score = 85;
head = &a; //将结点a的起始地址赋给头指针head
a.next = &b; //将结点b的起始地址赋给a结点的next成员
b.next = &c; //将结点c的起始地址赋给b结点的next成员
c.next = NULL; //将结点c的next成员不存放其他结点地址
p = head; //使p也指向a结点
do
{
printf("%1d%5.1f\n",p->num,p->score);
p = p->next; //使p指向下一结点
}while(p != NULL); //输出完c结点后p的值为NULL,循环终止
return 0;
}*/
//写一函数建立一个有3名学生数据的单向动态链表
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct Student)
struct Student
{
long num;
float score;
struct Student *next;
};
int n;
struct Student * creat(void)
{
struct Student * head;
struct Student *p1,*p2;
n = 0;
p1 = p2 = (struct Student *)malloc(LEN); //开辟一个新单元
scanf("%ld,%f",&p1->num,&p1->score); //输入第1个学生的学号和成绩
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);
scanf("%ld,%f",&p1->num,&p1->score);
}
p1->next = NULL;
return (head);
}
int main()
{
struct Student *pt;
pt = creat();
printf("\nnum:%ld\nscore:%5.1f\n",pt->num,pt->score);
return 0;
}