char sex[3]; 以及保存下一节点地址的指针*next。 float grade[6]; struct ST *next; };
struct *SI; *SI为指向结构体ST的的指针变量。 2、单向链表的建立
这里采用动态建立链表的方法,即每次在满足条件的前提下,向内存动态申请大小为一个节点数据类型大小的内存空间,并输入当前节点的相关信息。将新节点通过指针域与已建立的链表相连。由此建立包含N个节点信息的单向链表。
3、有关数据结构的基本操作 (1)单链表的插入 (2)单链表的删除 (3)单链表的查找 (4)单链表的排序
(三)数据存取
数据存取采用的是线性链表的存取结构,其特点是:使用一组任意的存储单元存储线性表中的数据元素,这些存储单元之间在逻辑结构上虽然是相互关联的,但是其在物理结构上并不是连续的。数据元素之间的逻辑关系是由节点中的指针域指示的,这种存储结构是非顺序映像或者叫做链式映像。在使用中,我们只需关心数据元素的逻辑次序而不必关心它的真正存储地址。
我们在单链表第一个元素所在的节点之前设置一个节点—头结点。头结点的指针域存储第一个元素所在节点的存储位置;而数据域并没有存储任何信息。
基于以上建立单向链表的思想,我们在对节点元素进行存取的过程中只需找到该链表的头结点,即可完成对数据元素的存取操作。
(四)数据录入方法设计
链表是一种动态存储结构,所需的存储空间只有在执行malloc之后,才能申请到一个
可用节点空间;free的作用是系统回收一个节点,回收后的空间可以备作再次生成节点时使用。动态建立链表共有两种基本方法:方向建立链表、正向建立链表。这里采用反向建立链表的数据录入方法。
数据录入的方法是:从线性表的最后一个元素开始,从后向前依次插入到当前链表的第一个节点之前。在满足循环条件的前提下,依次输入当前节点的相关信息,并通过节点的指针域将当前节点插入已建立的链表当中。
五、算法分析与流程
(一)函数定义
void display(int Max);信息展示函数定义 void menu();菜单函数定义
int display_module(int Max);输出全部学生信息(按指定课程成绩降序排列,按平均成绩降
序排列)
int read_imformation();在指定的学生前或后再插入一个学生的信息
int add_module(int Max); 输入学生的基本数据(包括学号、姓名、性别和5门课的成绩) int find_num_module(int Max);从磁盘中读入存储的信息 int find_name_module(int Max);
int modify_module(int Max);修改指定学生的信息 int sort_module(int Max);统计指定课程不及格的人数 int save_module(int Max);将信息文件存入磁盘中 int del_module(int Max);删除指定学生的信息
(二)函数流程图

