小白编程题:单链表的简单应用
描述
编程实现一个简易学生信息管理系统,按如下步骤分别用自定义函数实现:
(1) 根据输入信息创建单链表。每个学生的信息包括姓名和成绩;
(2) 输出简易学生信息管理系统(单链表)的所有学生(结点)信息。
I/O
输入格式
根据输入的若干个学生信息创建单链表。每一行代表一个学生信息,以成绩-1作为输入的结束。
输出格式
每个学生信息占一行,姓名和成绩之间以空格分隔,成绩保留一位小数。
输入样例
Cai 61.2
Cai 64.6
Cheng 68.4
Xiao 71.2
Zhang 83.2
Liu 90.4
Xiao 92.6
Cai 96.8
xx -1
输出样例
Cai 61.2
Cai 64.6
Cheng 68.4
Xiao 71.2
Zhang 83.2
Liu 90.4
Xiao 92.6
Cai 96.8
实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student{
char name[10];
float score;
struct student *next;
}node;
void create(node **head){
char name[10];
float score;
while(~scanf("%s %f",name,&score)) {
if (score != -1) {
node *new = (node *) malloc(sizeof(node));
new->next = NULL;
strcpy(new->name,name);
new->score=score;
if (*head == NULL) {
*head = new;
} else {
node *work = *head;
while (work->next != NULL) {
work = work->next;
}
work->next = new;
}
}else{
break;
}
}
}
void printlist(node *head){
node *work=head;
while(work!=NULL){
printf("%s %.1f\n",work->name,work->score);
work=work->next;
}
}
void freelist(node *head){
node *work;
while(head!=NULL){
work=head;
head=head->next;
free(work);
}
}
int main(){
node *head=NULL;
create(&head);
printlist(head);
freelist(head);
return 0;
}