初学链表(分析建立学生信息链表)

发布时间:2023年12月23日

本题要求实现一个将输入的学生成绩组织成单向链表的简单函数。

#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);
?? ?}
}

文章来源:https://blog.csdn.net/wx20041102/article/details/135172565
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。