ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:267.68KB ,
资源ID:14402824      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14402824.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《教学计划编制问题》数据结构课程设计说明书文档格式.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

《教学计划编制问题》数据结构课程设计说明书文档格式.docx

1、关键词:教学计划编制问题;数据结构;邻接表存储结构;栈;拓扑排序 第1章 绪论数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。该课程设计的目的是通过课程设计的综合训练培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。本次课程设计的内容是教学计划编制问题,邻接表是图的一种链式存储结构。在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附于顶点的边。栈是一种限定性的线性表,它只允许在表尾插入元素或删除元素,所以栈具有后进先出的特性。拓扑排序是由某个集合上的一个偏序得到该集合上的一个全序。而教学计划编

2、制问题就是对排序问题的应用,通过这个设计事例,我们有理由相信至此以后,我们对邻接表、栈和拓扑排序的理解将会是更上一层楼。通过该课程设计,能运用所学知识,能上机解决一些实际问题,了解并初步掌握设计、实现较大程序的完整过程,包括系统分析、编码设计以及调试分析,熟练掌握数据结构的选择、设计、实现以及操作方法,为进一步的应用开发打好基础。第2章 教学计划编制问题陈述及需求分析2.1 教学计划编制问题陈述大学中每个专业都有固定的教学计划,任何专业的学习年限是固定的,每年两个学期,每个专业开设的课程是确定的,而课程之间的开设时间是必须满足先修关系的。每们课可以有多门先修课,也可以没有。以本科四年为准,要求

3、设计一个教学计划。输入学期总数,一学期的学分上限,每门课的课程号、学分和直接先修课的课程号。一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。输出教学计划到用户指定的文件中,计划表格格式自行设计,若无结果可报告适当的信息。2.2 功能需求分析 本系统主要实现对大学中每个专业的教学计划进行设计,需要实现以下几个方面的功能: (1)创建存储结构:创建邻接表。 (2)数据的输入:学期总数,课程数,一学期的学分上限,每门课的课程号(固定占2位的数字串)、学分和直接先修课的课程号。 (3)数据的处理:对输入的数据进行计算。(4)结果的输出:输出各门课程所对应的学分,以及每学期

4、各门课程的安排。第3章 系统设计3.1 总体设计允许用户指定下列两种编排策略之一:采用第二种策略,使课程尽可能地集中在前几个学期中,根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体,创建图,结合先修关系的AOV网,采用邻接链表存储和使用前插法,通过菜单显示代号所对应课程及课程的先修课程,运用拓扑排序将课程排序后并决定出每学期所学课程,最后输出图G的信息,将图的顶点和弧边输出。具体流程图如图3.1所示。图 3.1 系统功能结构图 首先,初始化栈,构造一个空栈S,判定这个栈是否为空栈,如果是,则进行下一步操作,否则,返回错误;接下来对各个顶点求入度,将入度为零的顶点存入数组,当所有入度为

5、零的顶点都存入数组后,执行完毕。具体流程图如图3.2所示。 Y N图3.2 拓扑排序流程图3.2 主要模块简介1、管理员要进入管理员界面,首先需要输入用户名和密码。输入正确的用户名和密码后,即可进入管理员界面;若输入错误,则提示输入正确的用户名或密码。2、主函数本程序主要调用两个模块:主程序模块-拓扑排序模块,调用关系简单,通过主函数主要调用TopoSort()输出G顶点的拓扑排序,Display()输出图的邻接矩阵,CreateGraph()生成图,用来实现对教学计划的编制。3、拓扑排序利用课程之间的先修关系,运用拓扑排序进行学期课程安排(4个学期),每学期都有学分上限,而每学期应学课程的学

6、分应在学分上限内,超过学分上限后,将移到下一学期课程安排中。在满足课程先修关系和各学期课程安排的情况下,如果某门课程的学分超过该学期的学分上限,则系统返回值为Error,提示错误,需要进行修改,必须保证该学期的各课程学分不会超过学分上限,这时系统返回值为OK。第4章 详细设计4.1 数据结构1、图的数据结构typedef struct ArcNode /表结点 int adjvex; /该弧所指向的顶点的位置,弧的节点结构 struct ArcNode *nextarc; /指向下一条弧的指针ArcNode; /链表结点typedef struct VNode /头结点 VertexType

7、data; /顶点信息 int grades; /存储学分信息 ArcNode *firstarc; /指向第一条依附该顶点的弧的指针VNode,AdjListMAX_VERTEX_NUM;typedef struct /图的数据结构 AdjList vertices; /vertices存储课程名 int vexnum,arcnum; /图的当前顶点数和弧数ALGraph;2、栈的数据结构typedef struct SqStack SElemType *base; SElemType *top; int stacksize; /分配的存储空间SqStack;4.2 抽象数据类型的定义1、图

8、的抽象数据类型定义 ADT Graph 数据对象 V:V是具有相同特性的数据元素的集合,称为顶点集。 数据关系 R: R=VR VR=|v,wV且P(v,w),表示从v到w的弧, 谓词P(v,w)定义了弧的意义或信息 基本操作 P: CreateGraph(&G,V,VR); 初始条件:V是图的顶点集,VR是图中弧的集合。 操作结果:按V和VR的定义构造图G。 LocateVex(G,u)图G存在,u和G中顶点有相同特征。若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。 ADT Graph 2、栈的抽象数据类型定义 ADT Stack 数据对象:D=|ElemSet,i=1,2,.

9、,n,n 数据关系:R1=|,D,i=2,.,n 约定端为栈顶,端为栈底。 基本操作: InitStack(&S)构造一个空栈S。 StackEmpty(S)栈S已存在。若栈S为空栈,则返回TRUE,否则FALSE。 Pop(&S,&e)栈S已存在且非空。删除S的栈顶元素,并用e返回其值。 Push(&S,e)插入元素e为新的栈顶元素。 ADT Stack int LocateVex(ALGraph G,VertexType u) /*查找图中某个顶点位置*/ int CreateGraph(ALGraph &G) /*采用邻接表存储结构*/ void Display(ALGraph G) /

10、*输出图G的信息*/ void FindInDegree(ALGraph G,int indegree) /*求顶点的入度*/ int InitStack(SqStack &S) /*栈的初始化*/ int StackEmpty(SqStack S) /*判空*/ int Pop(SqStack &S,SElemType &e) /*出栈*/ int Push(SqStack &S,SElemType e) /*入栈*/4.3 设计说明教学计划编制问题主要用的是算法是拓扑排序。偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员之间可比较。一个表示偏序的有向图可用来表示一个流程图。它或者

11、是一个施工流程图,或者是一个产品生产的流程图,再或者是一个数据流图(每个顶点表示一个过程)。图中每一条边表示两个子工程之间的次序关系(领先关系)。拓扑排序的主要步骤:(1)在有向图中选一个没有前驱的顶点且输出之。(2)从图中删除该顶点和所有以它为尾的弧。(3)重复上述两步,直至全部顶点均已输出,或者当前图中不存在无前驱的顶点为止。针对上述三步操作,我们可以用邻接表作为有向图的存储结构,且在头结点中增加一个存放顶点入度的数组(indegree)。入度为零的顶点即为没有前驱的顶点,删除顶点及以它为尾的弧的操作,则可换以弧头顶点的入度减1来实现。为了避免重复检测入度为零的顶点,可另设一栈暂存所有入度

12、为零的顶点。4.4 算法说明1、主函数的算法设计: 显示子菜单,调用各个子函数,最后退出程序,主要代码:void main() ALGraph G; AdjList Temp; printf0(); struct Name nameN=1,23456789101112; OUTPUT(); printf(*教学计划编制系统*nn);请输入学期的总数: scanf(%d,&TotalTerms);请输入学期的学分上限:MaxScores); CreateGraph(G); Display(G); TopoSort(G,Temp,name);2、各主要子函数的算法设计 (1)邻接表存储结构 代码:int CreateGraph(ALGraph &G) int i,j,k; VertexType va; ArcNode *p;请输入教学计划的课程数:G.vexnum);请输入各门课程的先修课程的总和(弧总数):G.arcnum); printf(

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1