赞
踩
6-1 学生成绩链表处理 (20分)
本题要求实现两个函数,一个将输入的学生成绩组织成单向链表;另一个将成绩低于某分数线的学生结点从链表中删除。
- struct stud_node *createlist();
- struct stud_node *deletelist( struct stud_node *head, int min_score );
函数createlist
利用scanf
从输入中获取学生的信息,将其组织成单向链表,并返回链表头指针。链表节点结构定义如下:
- struct stud_node {
- int num; /*学号*/
- char name[20]; /*姓名*/
- int score; /*成绩*/
- struct stud_node *next; /*指向下个结点的指针*/
- };
输入为若干个学生的信息(学号、姓名、成绩),当输入学号为0时结束。
函数deletelist
从以head
为头指针的链表中删除成绩低于min_score
的学生,并返回结果链表的头指针。
- #include <stdio.h>
- #include <stdlib.h>
-
- struct stud_node {
- int num;
- char name[20];
- int score;
- struct stud_node *next;
- };
-
- struct stud_node *createlist();
- struct stud_node *deletelist( struct stud_node *head, int min_score );
-
- int main()
- {
- int min_score;
- struct stud_node *p, *head = NULL;
-
- head = createlist();
- scanf("%d", &min_score);
- head = deletelist(head, min_score);
- for ( p = head; p != NULL; p = p->next )
- printf("%d %s %d\n", p->num, p->name, p->score);
-
- return 0;
- }
-
- /* 你的代码将被嵌在这里 */
- 1 zhang 78
- 2 wang 80
- 3 li 75
- 4 zhao 85
- 0
- 80
- 2 wang 80
- 4 zhao 85
作者
C课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
- struct stud_node *createlist()
- {
- struct stud_node *head,*tail,*s;
- head=(struct stud_node*)malloc(sizeof(struct stud_node));
- head->next=NULL;tail=head;
- while(1)
- {
- s=(struct stud_node*)malloc(sizeof(struct stud_node));
- scanf("%d",&s->num);
- if(s->num==0)break;
- scanf("%s",s->name);
- scanf("%d",&s->score);
- s->next=NULL;
- tail->next=s;
- tail=s;
- }
- return head;
- }
- struct stud_node *deletelist( struct stud_node *head, int min_score )
- {
- struct stud_node *p,*n;
- p=head->next;
- while(p!=NULL)
- {
- if(p->score<min_score)
- {
- n=head;
- while(n->next!=p)
- n=n->next;
- n->next=p->next;
- free(p);
- }
- p=p->next;
- }
- return head->next;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。