From 71dc61a2ff7537be10acc2b5daa71e8721d900b7 Mon Sep 17 00:00:00 2001 From: p72fupixj Date: Sun, 5 Nov 2023 15:21:26 +0800 Subject: [PATCH] ADD file via upload --- 8_link_list.c | 199 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 8_link_list.c diff --git a/8_link_list.c b/8_link_list.c new file mode 100644 index 0000000..7d2e262 --- /dev/null +++ b/8_link_list.c @@ -0,0 +1,199 @@ +#include +#include +#include +#define N 100 + +struct stu_info +{ + char num[20]; + char cls[20]; + char name[20]; + float math,physics,english,total; struct stu_info* prev; + struct stu_info* next; +}; + +struct stu_info stu[N]; +int top=0; +struct stu_info *head=NULL; +struct stu_info *tail=NULL; + +void print_menu() +{ + printf("1.input\n"); + printf("2.delete\n"); + printf("3.select\n"); + printf("4.order\n"); + printf("5.output\n"); + printf("6.quit\n"); + printf("please input your option\n"); +} + +void print() +{ + struct stu_info* p=head; + while (p!=NULL) + { + printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n",p->num,p->cls,p->name,p->math,p->physics,p->english,p->total); + p=p->next; + } +} + + +void input() +{ + char op[20]; + struct stu_info* p=NULL; + while(1) + { + p=(struct stu_info *)malloc(sizeof(struct stu_info)); + if (head==NULL) + { + head=p; + } + //p->num = (char *)malloc(sizeof(char) * 20); + //p->cls = (char *)malloc(sizeof(char) * 20); + //p->name = (char *)malloc(sizeof(char) * 20); + printf("Id "); + scanf("%s",p->num); + printf("class "); + scanf("%s",p->cls); + printf("name "); + scanf("%s",p->name); + printf("score1 "); + scanf("%f",&p->math); + printf("score2 "); + scanf("%f",&p->physics); + printf("score3 "); + scanf("%f",&p->english); + p->total=p->math+p->physics+p->english; + p->prev=tail; + p->next=NULL; + if(p!=head) tail->next=p; + tail=p; + printf("continue?\n"); + do{ + scanf("%s",op); + }while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0); + if(strcmp(op,"no")==0) return; + } +} + +void del() +{ + struct stu_info* p=head; + char key[20],op[20]; + while(1) + { + p=head; + scanf("%s",key); + while(p!=NULL) + { + if(strcmp(p->num,key)==0||strcmp(p->name,key)==0) + { + if(p==head) head=p->next; + else (p->prev)->next=p->next; + (p->next)->prev=p->prev; + } + p=p->next; + } + print(); + printf("continue?\n"); + do{ + scanf("%s",op); + }while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0); + if(strcmp(op,"no")==0) return; + } +} + +void slc() +{ + int flag; + struct stu_info* p=head; + char key[20],op[20]; + while(1) + { + flag=0;p=head; + scanf("%s",key); + while(p!=NULL) + { + if(strcmp(p->num,key)==0||strcmp(p->cls,key)==0) + { + flag=1; + printf("%s,%s,%s,%.1f,%.1f,%.1f,%.1f\n",p->num,p->cls,p->name,p->math,p->physics,p->english,p->total); + } + p=p->next; + } + if(!flag) + { + printf("there is no eligible student\n"); + return; + } + printf("continue?\n"); + do{ + scanf("%s",op); + }while(strcmp(op,"yes")!=0&&strcmp(op,"no")!=0); + if(strcmp(op,"no")==0) return; + } +} + +void order() +{ + struct stu_info* p=tail; + struct stu_info* q=head; + struct stu_info* tmp=NULL; + while(p!=NULL) + { + q=head; + while(q!=p) + { + if(strcmp((q)->cls,(q->next)->cls)==1||strcmp((q)->cls,(q->next)->cls)==0&&((q)->total<(q->next)->total)) + { + if(p==q->next) p=q; + if(head==q) head=q->next; + else (q->prev)->next=q->next; + if(tail==q->next) tail=q; + else ((q->next)->next)->prev=q; + tmp=q->next; + q->next=tmp->next; + tmp->prev=q->prev; + tmp->next=q; + q->prev=tmp; + } + else q=q->next; + } + p=p->prev; + } + print(); + return; +} + +int main() +{ + int op; + while(1) + { + print_menu(); + scanf("%d",&op); + switch(op) + { + case(1): + input(); + break; + case(2): + del(); + break; + case(3): + slc(); + break; + case(4): + order(); + break; + case(5): + print(); + break; + case(6): + return 0; + } + } +} +