本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。
#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);
?? ?}
}