题目举例
本关任务:用单向链表建立一张班级成绩单,包括每个学生的学号、姓名、英语、高等数学、普通物理、C语言程序设计四门课程的成绩。用菜单实现下列功能: ① 输入每个学生的各项信息。 ② 输出每个学生的各项信息。 ③ 修改指定学生的指定数据项的内容。 ④ 统计每个同学的平均成绩(保留2位小数)。 ⑤ 输出各位同学的学号、姓名、四门课程的总成绩和平均成绩。按照平均成绩进行升序排序的函数(重难点)。
一、类型定义部分
类型定义可以使结构体简洁明了,是不可或缺的准备工作
typedef struct _achievement//结点设置
{
char stunumber[16];
char name[8];
int english, math, physics,c;
struct _achievement* next;
}Achieve;
typedef struct _list//指向链表结点的指针集合
{
Achieve* head;
Achieve* target;
Achieve* left;
Achieve* right;
Achieve* left_front;
Achieve* tail;
}List;
1、第一个typedef是正常的链表结点的定义(包含数据域和指向下一个结点的指针)
2、第二个typedef是核心部分(听翁恺老师的链表课所获)核心思想:创建了一个整合包,里面打包了可以由你决定的指向任一结点的结点指针(类似于二级指针,因为这样才能把在函数内部对链表进行的操作保留到主函数中,传参注意把List的地址传过去)。
二、总调用函数
void exe()
{
int input;
List list;
void (*func[7])(List*) = { NULL, Input ,Put, Modify, Average, All