#include <stdio.h>
#include <stdlib.h>
struct Student
{ int num;
float score;
};
struct Node
{
struct Student stu;
struct Node *next;
};
int main()
{
struct Node *n;
struct Node *p;
struct Node *head=NULL;
int m;
printf("请输入结点的总个数:");
scanf("%d",&m);
n=(struct Node *)malloc(sizeof(struct Node));
printf("请输入第1个学生的学号和成绩:");
scanf("%d %f",&n->stu.num,&n->stu.score);
n->next=NULL;
p=n;
head=n;
for(int i=1;i<m;i++){
n=(struct Node *)malloc(sizeof(struct Node));
printf("请输入第%d个学生的学号和成绩:",i+1);
scanf("%d %f",&n->stu.num,&n->stu.score);
n->next=NULL;
p->next=n;
p=n;
}
p=head;
do
{printf("学号:%ld 成绩:%5.1f\n",p->stu.num,p->stu.score);
p=p->next;
}while(p!=NULL);
return 0;
}
输出显示:
请输入结点的总个数:3
请输入第1个学生的学号和成绩:1234 87.8
请输入第2个学生的学号和成绩:2234 98.3
请输入第3个学生的学号和成绩:3234 88.5
学号:1234 成绩: 87.8
学号:2234 成绩: 98.3
学号:3234 成绩: 88.5
方法二:将第一个结点与第二个结点写到一起
#include <stdio.h>
#include <stdlib.h>
struct Student
{ int num;
float score;
};
struct Node
{
struct Student stu;
struct Node *next;
};
int main()
{
struct Node *n;
struct Node *p;
struct Node *head=NULL;
int m;
printf("请输入结点的总个数:");
scanf("%d",&m);
for(int i=0;i<m;i++)
{
n=(struct Node *)malloc(sizeof(struct Node));
printf("请输入第%d个学生的学号和成绩:",i+1);
scanf("%d %f",&n->stu.num,&n->stu.score);
if(head==NULL)
{
head=n;
p=n;
}else{
p->next=n;
p=n;
}
}
p=head;
do
{printf("学号:%ld 成绩:%5.1f\n",p->stu.num,p->stu.score);
p=p->next;
}while(p!=NULL);
return 0;
}
输出显示:
请输入结点的总个数:3
请输入第1个学生的学号和成绩:234 67.8
请输入第2个学生的学号和成绩:345 56.9
请输入第3个学生的学号和成绩:456 76.5
学号:234 成绩: 67.8
学号:345 成绩: 56.9
学号:456 成绩: 76.5
注意:
struct Student
{ int num;
float score;
};
struct Node
{
struct Student stu;
struct Node *next;
};
可以改写为下面的格式
struct Student
{ int num;
float score;
struct Student *next;
};