利用上节所学的线性表的两种存储结构及相应的基本操作方法,实现导学问题1——简易的学生信息管理系统。
导学问题1这类信息管理问题进行抽象后的数据结构是线性表,以上章节介绍了线性表的顺序存储及基本操作的实现,本节将把抽象的顺序表的存储和实现运用到导学问题1这个具体的学生信息管理程序实现中。
利用顺序表存储学生基本信息,此时该表中的数据元素是一个结构体类型,包括学号、姓名、性别、年龄、专业等数据项。要实现的建立、查询、删除和增加学生信息的功能均可利用顺序表基本操作的框架来实现。注意,由于学生信息表中数据元素结构体类型不能进行整体赋值、整体显示、整体比较等操作,因此需要对顺序表相关基本操作进行改写,如图2-14所示。
图2-14 顺序表基本操作与导学问题1需求间的关系
采用通用性增强的顺序表实现导学问题1的代码如下。
说明:上述代码中,main函数以菜单形式选择功能。
请读者进一步思考以下几个问题:
1)程序中有多处关于数据元素赋值的操作(见阴影部分),代码冗长重复,可否有方法简化代码。
2)如何自定义4个函数,分别完成main函数中每个菜单选项后的功能。
3)请考虑用文件存储学生信息。
4)请参照本程序完成课后应用实战第3题,即用顺序表实现导学问题2。
从导学问题1的实现可以看出,只要处理的数据元素间存在线性关系,均可采用顺序表加以存储,并采用基本操作完成相关功能。但如果在功能需求中,插入、删除操作比较频繁,顺序存储的效率显然不尽如人意,这时就可以使用既能表达线性关系,又能方便插入、删除的存储方式——链式存储。
针对导学问题1的要求,利用单链表实现学生信息管理系统的程序结构如图2-15所示。
图2-15 程序结构
本小节在实现导学问题1的程序时,更加注重了程序的模块化。主函数通过调用5个自定义函数来完成案例需求的相应功能,每个函数负责调用单链表已有的基本操作函数。为了避免2.2.1节中出现的结构体赋值语句重复出现的问题,又自定义了一个用于结构体赋值的函数,供相关函数调用。这种实现技巧实际上回答了上面的第1和第2个思考题。
导学问题1的单链表实现的完整代码如下。
请读者参照本程序完成课后应用实战第3题,即用单链表实现导学问题2。