本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct stud_node {
int num;
char name[20];
int score;
struct stud_node *next;
};
struct stud_node *head, *tail;
void input();
int main()
{
struct stud_node *p;
head = tail = NULL;
input();
for ( p = head; p != NULL; p = p->next )
printf("%d %s %d\n", p->num, p->name, p->score);
return 0;
}
void input()
{
struct stud_node* pf; //首先建立一个自由变量pf
int x = 0;
scanf("%d",&x);
while(x)
{
pf = (struct stud_node*)malloc(sizeof(struct stud_node));//建立一个结构体,将结构体的地址传给pf
pf->num = x;将pf指向的结构体中的num赋成x
scanf("%s %d",pf->name,&pf->score);
pf->next = NULL; 保证最后是NULL
if( head == NULL )
{
head = pf;
}
else
{
tail->next = pf;
}
tail = pf;
该代码必须要明白:开始时,head==tail 的, 并且都是NULL
红色的是难点:首先head是NULL,进入第一个if , 将head赋成pf , tail赋成pf,
之后将head的next指向pf的数据域,并且将tail赋成pf 之后便是循环
scanf("%d",&x);
}
}