码迷,mamicode.com
首页 > 其他好文 > 详细

折磨了我 N 次的 单链表

时间:2019-05-21 21:18:57      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:单链表   新建   排列   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 }

 

折磨了我 N 次的 单链表

标签:单链表   新建   排列   oid   std   turn   break   select   分数   

原文地址:https://www.cnblogs.com/wkx2000/p/10902180.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!