折磨了我 N 次的 单链表
Posted wkx2000
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了折磨了我 N 次的 单链表相关的知识,希望对你有一定的参考价值。
最近 ?? 有点不在学习上呀
自我检讨一下
发我这几天 多写代码
从刚刚开始接触 单链表,其实我觉得我是懂得
无论是插入 还是删除 什么的
但是,最近
直到遇见老师所发配下的任务 单链表的应用
我就很 懵逼
指针老是出错误呀
所以
这无时无刻 在提醒我们要把 指针学好
接下来,我要把题目亮出来(真是磨人的小妖精)
根据用户输入的学生人数及每个 学生姓名和成绩建立一个单链表(带头结点),并按学生成绩递减排序,然后按名次输出所有学生姓名和成绩。(重在排序)
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 }
以上是关于折磨了我 N 次的 单链表的主要内容,如果未能解决你的问题,请参考以下文章