数据结构课程设计(附代码)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上海应用技术学院课程设计报告
课程名称《数据结构课程设计》
设计题目猴子选大王;建立二叉树;各种排序;有序表的合并;成绩管理系统;院系计算机科学与信息工程专业计算机科学与技术班级
姓名学号指导教师日期
一.目的与要求
1. 巩固和加深对常见数据结构的理解和掌握
2. 掌握基于数据结构进行算法设计的基本方法
3. 掌握用高级语言实现算法的基本技能
4. 掌握书写程序设计说明文档的能力
5. 提高运用数据结构知识及高级语言解决非数值实际问题的能力
二.课程设计内容说明
1. 项目一
(1) 对设计任务内容的概述
学生成绩管理**
任务:要求实现对学生资料的录入、浏览、插入和删除等功能。
输入:设学生成绩以记录形式存储,每个学生记录包含的信息有:学号和各门课程的成绩,设学生成绩至少3门以上。存储结构:采用线性链式结构。
(2) 详细设计
LinkList *create():输入学生成绩记录函数;
void print(LinkList *head):显示全部记录函数
LinkList *Delete(LinkList *head):删除记录函数
LinkList *Insert(LinkList *head):插入记录函数
void menu_select():菜单选择
void ScoreManage():函数界面
(3) 程序流程图
(4) 程序模块及其接口描述
该程序可以分为以下几个模块:
1、菜单选择:void menu_select();
提供五种可以选择的操作,在main函数中通过switch语句调用菜单menu_select()函数,进入不同的功能函数中完成相关操作。
2、输入功能:LinkList *create();
通过一个for循环语句的控制,可以一次完成无数条记录的输入。并将其存入链
表。
3、输出功能:void print(LinkList *head);
通过一个while的循环控制语句,在指针p!=NULL时,完成全部学生记录的显示。知道不满足循环语句,程序再次回到菜单选择功能界面。
4、删除功能:LinkList *Delete(LinkList *head);
按想要删除的学生的学号首先进行查找,通过指针所指向结点的下移来完成,如果找到该记录,则完成前后结点的连接,同时对以查找到的结点进行空间的释放,最后完成对某个学生记录进行删除,并重新存储。
5、插入功能:LinkList *Insert(LinkList *head);
输入你想插入的位置,通过指针所指向结点的下移,找到该位置,将该新的学生记录插入到该结点,并对该结点后面的指针下移。链表长度加一,重新存储。
(5) 程序的输入与输出描述
输入:调用LinkList *create()函数,输入学生的姓名、学号、三门功课的成绩;
输出:调用void print(LinkList *head)函数,输出学生的记录。
(6) 程序测试
主菜单:
成绩管理系统的主界面:学生成绩记录的输入:输出学生成绩记录:
学生成绩记录的删除(删除学号是1101的学生记录)插入新的学生成绩记录(插入学号为1103的学生记录)
(7) 尚未解决的问题或改进方向
尚未解决的问题:该成绩管理系统还存在不少缺陷,而且它提供的功能也是有限的,只能实现学生成绩的输入、输出、删除、插入。对于,学生成绩记录的文件保存以及按学号、姓名等的查询也是缺少的。还有就是,对于多个学生成绩的操作也是不够的。
改进的方向:在时间许可的条件下,尽量的完善该系统的各种功能,同时也应修改系统,让它更为人性化、简单化,被广大用户所接受。
(8) 对软件的使用说明
该软件是属于比较低级的软件,只是包含了课程设计的要求的几个功能:输入、输出、删除、插入。所以用户在使用的过程中肯定会受到一定的局限性、不方便性,但由于时间的缘故,无法将软件做到尽善尽美。
2. 项目二
(1) 对设计任务内容的概述
各种排序
任务:用程序实现插入法排序、选择法排序、起泡法改进算法排序;
利用插入排序、选择法排序和冒泡法的改进算法,将用户随机输入的一列数按递增的顺序排好。
输入的数据形式为任何一个正整数,大小不限。
输出的形式:数字大小逐个递增的数列。
(2) 功能描述
该函数有以下几个功能:
1)对R[0..n-1]按递增有序进行直接插入排序
2)对R[0..n-1]按递增有序进行冒泡排序
3)对R[0..n-1]按递增有序进行直接选择排序
4)排序后的输出
5)调用所有排序,实现排序
(3) 程序流程图
(4) 详细设计
void InsertSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接插入排序void BubbleSort(RecType R[],int n):对R[0..n-1]按递增有序进行冒泡排序void SelectSort(RecType R[],int n):对R[0..n-1]按递增有序进行直接选择排序
void disp(RecType R[],int n):排序后的输出
void Sort():调用所有排序,实现排序
(5) 程序模块及其接口描述
该程序分为五个模块:
1.输入功能:void Sort()
建立一个数组存放用户在键盘上输入的关键字,在分别调用各种排序的函数,对关键字进行排序。
2.直接插入排序功能:void InsertSort(RecType R[],int n)
将后一个数与前一个数比较,将其插入到第一个比它大的大的数前面,其余数字往后移一个位置。每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
3.冒泡排序功能:void BubbleSort(RecType R[],int n)
在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位exchange,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置exchange值为0,在进行数据交换时,修改exchange为非0。在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序。
4.直接选择排序功能:void SelectSort(RecType R[],int n)
在无序区里找最小的数,第i小的数字放在第i个位置上,与原来第i个位置上的数字交换。
5.输出功能:void disp(RecType R[],int n)
(6) 程序的输入与输出描述
输入:要求是10个为数字的关键字;
输出:排序后新的序列。
(7) 程序测试
输入关键字,调用各种排序函数