标签:单链表 新建 排列 oid std turn break select 分数
最近 ?? 有点不在学习上呀
自我检讨一下
发我这几天 多写代码
从刚刚开始接触 单链表,其实我觉得我是懂得
无论是插入 还是删除 什么的
但是,最近
直到遇见老师所发配下的任务 单链表的应用
我就很 懵逼
指针老是出错误呀
所以
这无时无刻 在提醒我们要把 指针学好
接下来,我要把题目亮出来(真是磨人的小妖精)
根据用户输入的学生人数及每个 学生姓名和成绩建立一个单链表(带头结点),并按学生成绩递减排序,然后按名次输出所有学生姓名和成绩。(重在排序)
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct node{ 5 char name[10]; 6 int score; 7 struct node *next; 8 }stulist; 9 10 initstulist(stulist* head){ 11 head->next==NULL; 12 return head; 13 } 14 15 void inputstulist(stulist* head,int n){ 16 initstulist(head); 17 stulist*q=head; 18 int i; 19 for(i=0;i<n;i++){ 20 stulist*p=(stulist*)malloc(sizeof(stulist)); 21 printf("姓名:"); 22 scanf (" %s",p->name); 23 printf("分数:"); 24 scanf("%d",&p->score); 25 p->next=q->next; 26 q->next=p; 27 printf("\n"); 28 } 29 return; 30 } 31 32 void delstulist(stulist* head){ 33 stulist *p,*q; 34 p=head; 35 while(p){ 36 q=p->next; 37 free(q); 38 p=q; 39 } 40 41 } 42 43 void sortstulist(stulist* head,int n){ 44 stulist *p=head->next; 45 stulist *q; 46 int i,j,t; 47 char na[10]; 48 for(i=0;i<n;i++){ 49 q=p->next; 50 for(j=0;j<n-i-1;j++){ 51 if(p->score < q->score){ 52 t=p->score; 53 p->score=q->score; 54 q->score=t; 55 56 strcpy(na,p->name); 57 strcpy(p->name,q->name); 58 strcpy(q->name,na); 59 } 60 q=q->next; 61 } 62 p=p->next; 63 64 65 } 66 return; 67 } 68 69 void displaystulist(stulist* head){ 70 stulist* p=head->next; 71 while(p){ 72 printf("%s",p->name); 73 printf("%d",p->score); 74 p=p->next; 75 printf("\n"); 76 } 77 78 return; 79 } 80 81 int menu_select() 82 { 83 int n; 84 printf("\n\t\t\t 学生成绩管理程序:\n"); 85 printf("\n\t\t\t 1.插入学生成绩记录"); 86 printf("\n\t\t\t 2.销毁学生成绩记录"); 87 printf("\n\t\t\t 3.打印学生成绩登记表"); 88 printf("\n\t\t\t 4.将学生成绩排序并打印输出(按成绩升序排列)"); 89 printf("\n\t\t\t 0.退 出 \n"); 90 do 91 { 92 printf("\n\t\t\t请按数字0~4键选择功能:"); 93 scanf("%d",&n); 94 }while((n < 0)||(n >4)); 95 return n; 96 } 97 98 int main(){ 99 int n,a; 100 stulist L; 101 printf("请输入新建结点个数:"); 102 scanf("%d",&n); 103 do{ 104 a=menu_select(); 105 switch(a){ 106 case 1:inputstulist(&L,n); break; 107 case 2:delstulist(&L); break; 108 case 3:displaystulist(&L); break; 109 case 4:sortstulist(&L,n); displaystulist(&L); break; 110 case 0:break; 111 default: break;} 112 if(a==0){ 113 break;} 114 }while(a!=0); 115 return 0; 116 }
标签:单链表 新建 排列 oid std turn break select 分数
原文地址:https://www.cnblogs.com/wkx2000/p/10902180.html