#include<stdio.h> #include<stdlib.h> typedef struct student{ int sto; char sname[20]; int sgrade; struct student *next; }; struct student *creat(){ //创建链表,当输入学号为0时停止输入 student head,tail,p; int num; head=(student)malloc(sizeof(student)); head->next=NULL; tail=head; p=(student)malloc(sizeof(student)); p->next=NULL; while(scanf("%d",&num)!=0){ if(num==0) break; p->sto=num; scanf("%s%d",&p->sname,&p->sgrade); tail->next=p; tail=p; p=(student)malloc(sizeof(student)); p->next=NULL; } return head; }
void out(student *p){ //输出所有学生信息 puts("-----所有学生信息-----"); student *q; q=p->next; while(q!=NULL){ printf("%d %s %d\n",q->sto,q->sname,q->sgrade); q=q->next; } }
void search(student *p,int number){ //利用学号查找学生信息 student *q; q=p->next; while(q!=NULL){ if(q->sto==number){ printf(“该学生信息为:%d %s %d\n”,q->sto,q->sname,q->sgrade); break; } else q=q->next; } }
void jige(student *p,int grade){ //及格的学生信息(定值查找) student *q; q=p->next; while(q!=NULL){ if(q->sgrade>=grade) printf("%d %s %d\n",q->sto,q->sname,q->sgrade); q=q->next; } }
void insert(student *p){ //插入信息 student *q,*t,r; r=(student)malloc(sizeof(student)); r->next=NULL; printf(“请依次输入学生的学号、姓名、成绩:”); scanf("%d %s %d",&r->sto,&r->sname,&r->sgrade); q=p->next; t=q->next; while(q!=NULL){ if(q->next==NULL){ q->next=r; break; } else if((q->stosto)&&(r->stosto)){ q->next=r; r->next=t; break; } q=q->next; t=q->next; } }
void del(student *p,int dnum){ // 删除 student *q,*t; q=p; t=q->next; while(t!=NULL){ if(t->sto==dnum){ q->next=t->next; free(t); puts(“删除成功!”); break; } q=t; t=q->next; } }
int main(){ student *head; int number,grade,dnum; head=creat(); out(head); printf("\n-----查找学生信息-----\n"); printf(“请输入要查找的学生的学号:”); scanf("%d",&number); search(head,number); printf("\n-----合格的学生信息-----\n"); printf(“请输入及格分数:”); scanf("%d",&grade); jige(head,grade); insert(head); out(head); printf(“请输入要删除的学生学号:”); scanf("%d",&dnum); del(head,dnum); out(head); }

