1.链表的构建及其内容的输出:
Description
建立一个有若干个学生信息的单向链表,并对链表进行查询和输出。学生信息包括学号、姓名、一门课程成绩。
Input
从键盘输入若干学生信息,以学号输入0作为结束标记。其中,假设有效分数都在0~100之间。
Output
输出所有学生的信息。每个学生的信息占据一行。如果链表为空,则输出“LinkList is Null”,输出不包含双引号。
Sample Input
1011anney891012frank911013susan940
Sample Output
1011 anney 891012 frank 911013 susan 94
我写的c代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define N 21
typedef struct student
{
long ID;
char name[N];
int score;
struct student *next;
}STU;
STU *CreateList();
void PrintList(STU *head);
void FreeList(STU *head);
int main()
{
STU *head;
head = CreateList();
PrintList(head);
FreeList(head);
return 0;
}
STU *CreateList()
{
STU *head = NULL, *p, *q, *r;
p = (STU *)malloc(sizeof(STU));
head = p;
if(head == NULL)
{
printf("LinkList is Null\n");
exit(0);
}
q = p;
r = head;
scanf("%ld", &q->ID);
while(q->ID != 0)
{
getchar();
scanf("%s", q->name);
scanf("%d", &q->score);
p = (STU *)malloc(sizeof(STU));
q->next = p;
r = q;
q = p;
scanf("%ld", &q->ID);
}
r->next = NULL;
return head;
}
void PrintList(STU *head)
{
STU *p;
p = head;
if(p->ID == 0)
{
printf("LinkList is Null\n");
exit(0);
}
while(p != NULL)
{
printf("%ld ", p->ID);
printf("%s", p->name);
printf(" %d\n", p->score);
p = p->next;
}
return;
}
void FreeList(STU *head)
{
STU *p = head, *q;
while(p != NULL)
{
q = p -> next;
free(p);
p = q;
}
return;
}