输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。
提示:
定义函数struct stud_node *Creat_Stu_Doc()完成创建链表
定义函数struct stud_node DeleteDoc(struct stud_node head,int min_score)将分数低于min_score的结点删除
定义函数void Ptrint_Stu_Doc(struct stud_node *head)打印链表
输入输出示例:括号内为说明,无需输入输出
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct stu * list;
struct stu{
int num,score;
char name[20];
struct stu * next;
};
list create666(){
list head,p,tail;
head=NULL;
int num,score;
char name[20];
scanf("%d",&num);
scanf("%s",name);
scanf("%d",&score);
while(1){
p=(list)malloc(sizeof(struct stu));
scanf("%d",&num);
if(num==0)
break; //这一步一定要用while(1)而不用书上的最后加scanf 因为最后会在缓冲区留下无用的数
p->num=num; //影响后续输入min
scanf("%s",p->name);
scanf("%d",&p->score);
p->next=NULL;
if(head==NULL)
head=p;
else
tail->next=p;
tail=p;
}
return head;
}
list delete666(list head,int min){
list p1,p2;
while(head!=NULL&&head->score<min){
p2=head;
head=head->next;
free(p2);
}
if(head==NULL)
return NULL;
p1=head;
p2=head->next;
while(p2!=NULL){
if(p2->score<min){
p1->next=p2->next;
free(p2);
}
else
p1=p2;
p2=p1->next;
}
return head;
}
void print666(list head){
list p;
for(p=head;p!=NULL;p=p->next)
printf("%d %s %d\n",p->num,p->name,p->score);
}
int main(){
list head;
head=create666();
int min;
scanf("%d",&min);
head=delete666(head,min);
print666(head);
return 0;
}