数据结构学习 之 链表 练习 链表排序功能.(热身练习)

----非常火大.cao!去年的程序到今年竟然运行不成功 ,一个 排序问题搞到现在, ╮(╯▽╰)╭...可能不是当时的最终版本...

本来准备 结合 我的 上一次mysql 操作 练习 将数据 保存到 mysql 数据库 的; 没想到.... 

还没解决....

明天再说! 先洗澡睡觉...吃大亏了今天. ...


先介绍下基本功能:

      一个用于存储学生基本信息 的 链表,实现在任意位置 添加,删除,修改,的功能,以及排序功能'

学生有是个属性: 学号,姓名,语文分数,数学分数; 

     --------------------------------------------------

            1.按下'r'开始读取文件信息!

            2..按下's'开始对其进行排序!

            3.按下'a'开始添加信息!

    4.按下'd'删除当前信息!

    5.按下'e'修改当前信息!

    6.按下'n'显示下一条信息!

    7.按下'p'显示上一条信息!

    8.按下'v'显示全部信息!

    9.按下'w'开始写入所有信息!

     10.按下'q'退出程序!

--------------------------------------------------

printf("\n\twarning:排序`写入操作需要先读文件或是写!\n"); 

排序功能: 

---------------------------------------------

printf("\t\t1.按下数字0开始根据No进行排序!\n");

printf("\t\t2.按下数字1开始根据总分进行排序!\n");

printf("\t\t3.按下数字2开始根据数学进行排序!\n");

printf("\t\t4.按下数字3开始根据语文进行排序!\n");

printf("\t\t5.按下其他数字开始根据学号进行排序!\n");

printf("--\t---------------------------------------------\n"); 


文件结构:

 main.c:主函数所在文件

 menu.c:菜单显示功能文件

 Read.c: 读取文件中学生信息功能的文件

 Sort.c:排序功能文件

 Student.c:学生信息操作基本文件;包括链表 添加 . 删除 .修改. 和 基本信息 显示功能

 Write.c : 学生信息写操作

 head.h :头文件

贴下源码(VS C++ 编译器 版本-- linux 环境 版本就不贴了):

  


  1 //student.c 文件
  2 
  3 #include<stdio.h>
  4 #include"head.h"
  5 #include<malloc.h>
  6 #include<stdlib.h>
  7 #include<stdafx.h>
  8 #include <iostream>
  9 
 10 void SetTempValue(struct Student *s)
 11 {
 12     printf("Input No:\t");
 13     scanf("%s",&(s->No));
 14 
 15     printf("Input Name:\t");
 16     scanf("%s",&(s->Name));
 17 
 18     printf("Input Maths:\t");
 19     scanf("%d",&(s->Maths));
 20 
 21     printf("Input Chi:\t");
 22     scanf("%d",&(s->Chi));
 23     
 24 }
 25 
 26 
 27 struct Student * StudentInit(struct Student *s)
 28 {
 29     strcpy(s->No,"");
 30     strcpy(s->Name,"");
 31     s->Maths=0;
 32     s->Chi=0;
 33     s->Next=NULL;
 34     s->Previous=NULL;
 35     s->Next=s;
 36     return s;
 37 }
 38 
 39 
 40 
 41 void set(struct Student *p,struct Student *s)
 42 {
 43     strcpy(p->No,s->No);
 44     strcpy(p->Name,s->Name);
 45     p->Maths=s->Maths;
 46     p->Chi=s->Chi;
 47 }
 48 
 49 
 50 void Add(struct Student *s,struct Student *HL)
 51 {
 52     struct Student *newS = (struct Student *)malloc(sizeof(struct Student));
 53     set(newS,s);
 54     //exchange shit!
 55     newS->Next=HL->Next;
 56     newS->Previous = HL;
 57 //注意
 58     HL->Next->Previous=newS;
 59     
 60     HL->Next = newS;
 61     HL->Previous=NULL;
 62 }
 63 
 64 void DeleteThisOne(struct Student *s)
 65 {
 66     struct Student *L;
 67     L=s->Previous;
 68     L->Next=s->Next;
 69     s->Next->Previous=L;
 70     free(s);    
 71 }
 72 
 73 void  Edit(struct Student *des,struct Student *src)
 74 {
 75     strcpy(des->No,src->No);
 76     strcpy(des->Name,src->Name);
 77     des->Maths=src->Maths;
 78     des->Chi=src->Chi;
 79     
 80 }
 81 
 82 void DisplayThisOne(struct Student *s)
 83 {
 84     printf("\tNo:     %s\n",s->No);
 85     printf("\tName: %s\n",s->Name);
 86     printf("\tMaths: %d\n",s->Maths);
 87     printf("\tChi:     %d\n",s->Chi);
 88     printf("\tChi:     %d\n",s->Chi+s->Maths);
 89 }
 90 
 91 void DisplayAll(struct Student *head)
 92 {
 93     head=head->Next;
 94     while(head->Previous!=NULL)
 95     {
 96         printf("\tNo:     %s\n",head->No);
 97         printf("\tName :  %s\n",head->Name);
 98         printf("\tMaths:  %d\n",head->Maths);
 99         printf("\tChi:    %d\n",head->Chi);
100         printf("\tSum:    %d\n",head->Chi+head->Maths);
101         printf("-------------------------------------------------------------\n");
102         head=head->Next;
103       }
104 }
105 
main.c:↓
Code

sort.c:
Code

read.c

Code

write.c:

Code

menu.c

Code

head.h

Code

好了代码贴完 收工!

原文地址:https://www.cnblogs.com/ToDoToTry/p/1509864.html