设计方法和基本原理
1.课题功能描述
本程序要求创建单向链表保存学生的各项信息,如学号、姓名和成绩等,并完成学生信息的插入、删除及信息的显示等功能。
2. 问题详细描述
某班有若干个学生,每个学生的成绩信息包括学号、姓名和某门课成绩。要求编写多个函数分别实现下列功能,而后在main函数中进行调用。
(1)创建链表函数creatList:建立单向链表,每个结点包括:学号(int num),姓名(char name[20]),成绩(double score)。按照学号顺序从小到大输入学生的信息。当输入学生学号为0时,表示输入结束。
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
(2)插入函数insert:给出某个同学的信息,按照学号的顺序将其插入该链表中,使原链表仍然有序。如插入学生信息为:
96085 WangLiping 77
98120 ZhangLi 75
99912 LiuHai 80
(3)删除函数delete:给定某个同学的学号,找到该同学的信息后,将其从链表中删除。如删除学号为98044的同学信息。
(4)显示函数output:输出链表中各个同学的信息。
3. 问题的解决方案
根据问题的描述,可以按照程序要求的功能采用结构化的设计思想,划分为五个功能模块。
(1) 采用结构体类型存储学生信息。
(2) 创建链表时,要给各个结点输入数据(每个结点存储一个学生的信息),并建立起前后结点相互联结的关系。
(3) 插入时使用new操作符开辟新的存储空间,用来存放新结点,而后找到与该学号对应的结点,将新结点插入到其后。删除时,先输入某一个学号,而后找到与该学号对应的结点将其从链表中删除,即将该结点从链表中分离出来,并释放其内存空间。
(4) 提供菜单选项,供用户选择各个功能模块,例如:
1. 插入新信息,请选择:1
2. 删除信息,请选择:2
3. 显示信息,请选择:3
4. 结束程序,请选择:4
选择1,执行插入操作时,应提示用户输入待插入的学生信息;选择2,执行删除操作时,提示用户输入要删除的学生学号。
四、主要技术问题的描述
根据三的分析,主要问题在于链表的创建、插入和删除。
(1)链表的创建
依据学号判断链表的建立过程是否结束。输入结束后,表尾结点所指向的下一个结点应为空。
(2)结点的插入
先根据学号找到新结点的位置,例如设指针变量q指向新结点,若要将其插入到指针变量p指向的结点后,可执行如下操作:
t=p->next; //t为指针变量
p->next=q;
q->next=t;
n++;//结点数目增加
这样就将该新结点插入到了指定位置,注意考虑要插入的结点可能位于最后的位置。
(3)结点的删除
删除时,要考虑待删除结点是否为第一个结点;若为中间结点,设指针变量p1指向待删除结点,p2指向其前一个结点,则删除p1结点的操作为:
p2->next=p1->next;
delete(p1);
五、创新要求
在基本要求达到后,进行创新设计:
(1)使用多文件,即主函数和各个函数分别存放在不同的.cpp文件中,在头文件中进行函数原型声明。
(2)对程序功能进行拓展,使其更加实用。例如,将该链表按照成绩进行排序。