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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计教学计划编制资料.docx

1、数据结构课程设计教学计划编制资料摘 要教学计划(课程计划)是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不同课程在管理学习方式的要求及其所占比例,同时,对学校的教学、生产劳动、课外活动等作出全面安排,具体规定了学校应设置的学科、课程开设的顺序及课时分配,并对学期、学年、假期进行划分。根据一定的教育目的和培养目标制定的教学和教育工作的指导文件。它决定着教学内容总的方向和总的结构,并对有关学校的教学、教育活动,生产劳动和课外活动校外活动等各方面作出全面安排,具体规定一定学校的学科设置、各门学科的教学顺序、教学时数以及各种活动等。教学计划、教学大纲和教科书互相联系,共同反映教学内容

2、。近代以来,特别是在实行学科课程的条件下,教学计划主要是学科的计划,或只是学科表。随着社会经济和科学技术的新发展,教育结构不断发生变革,现代教育和教学理论主张对教学计划的结构实行改革。除了教学以外,生产劳动、科技活动、发展体力和增进健康的活动、艺术活动和社会活动等也应列入教学计划。下面就利用对此进行程序设计,已达到预期的目的。关键字:数据结构,教学计划编制,抽象数据类型,程序设计 1. 需求分析根据课程之间的依赖关系制定课程安排计划,输入课程数及课程之间的关系。需要利用代码实现排序,以及对各个学期课程安排进行排序并输出。1.1问题描述大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年

3、限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。1.2设计思路首先利用拓扑排序对课程先后顺序进行分析,邻接表位主要存储结构,栈为主要辅助结构,给出课程之间的先后关系比如AOV网,然后进行拓扑排序,但当又向图中存在环时,无法查找该图的一个拓扑排序,当图中的所有顶点全部输出,表示对该图排序成功,实现拓扑排序算法时,相应的建立邻接表存储AOV网,为了避免重复检测入度为零的顶点,建立一个栈来对入度为零

4、的顶点进行存放。根据课程的先后关系,对个学期的课程进行排序,输出。1.3设计环境、原理设计环境和器材: 硬件:计算机;软件:Microsoft Visula C+。设计原理说明:运用图的拓扑排序对课程先修排列的实现,并调用递归完成拓扑排序。1.4实验目的培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用。通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。1.5实验内容针对计算机系本科课程,根据课程之间的依赖关系(如离散数

5、学应在数据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。2.概要设计:2.1流程图void FindInDegree(ALGraph G, int indegree)/求图中各节点的入度(如下左图)void CreatGraph(ALGraph *G)/构件图(如下右图)。 void TopologicalSort_1(ALGraph G,int numterm,int uplcredit) /有向图G采用邻接表存储结构(如下左图);void TopologicalSort_2(ALGraph G,int numterm,int uplcredit) /有向图G采用邻接表存储结

6、构(如下右图)。主函数:void main()2.2抽象数据类型图的定义ADT Graph数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R:R=VRVR=(v,w)|v,wV,(v,w)表示v和w之间存在直接先修关系基本操作P:void CreatGraph(ALGraph *);void FindInDegree(ALGraph , int * );void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);void TopologicalSort_2(ALGraph G,int numterm,int maxc

7、redit);ADT Graph栈的定义:ADT Stack数据对象:D=ai|aiElemSet,i=1,2,n,n=0数据关系:R1=ai-1 ai|ai-1,aiD,i=2,n基本操作:void InitStack (SqStack *S);int StackEmpty(SqStack S);void Push(SqStack *S, int );int Pop(SqStack *S, int *e);ADT Stack2.3主程序int main()/主函数int numterm; /学期总数int uplcredit; /一个学期的学分上限int selectway;ALGraph

8、G;printf(请输入学期总数:n);scanf(%d,&numterm);printf(请输入一个学期的学分上限:n);scanf(%d,&uplcredit);CreatGraph(&G);printf(请选择编排策略:1.课程尽可能集中到前几个学期;2.课程尽量均匀分布n);scanf(%d,&selectway);if(selectway=1)TopologicalSort_1(G,numterm,uplcredit);if(selectway=2)TopologicalSort_2(G,numterm,uplcredit);system(pause);return 0;2.4本程序

9、只有两个模块,调用关系简单主程序模块拓扑排序模块4.详细设计4.1头结点、表结点、邻接表的定义#define MAX_VERTEX_NUM 100 /最大课程总数typedef struct ArcNodeint adjvex;struct ArcNode *nextarc;ArcNode;typedef struct VNodechar name24; /课程名 int classid; /课程号int credit; /课程的学分int indegree; /该结点的入度int state; /该节点的状态ArcNode *firstarc; /指向第一条依附该顶点的弧的指针VNode,A

10、djListMAX_VEXTEX_NUM;typedef structAdjList vertices;int vexnum, arcnum;ALGraph;邻接表的基本操作:void CreatGraph(ALGraph *);创建邻接表void FindInDegree(ALGraph , int * );求一个结点的入度void TopologicalSort_1(ALGraph G,int numterm,int maxcredit);拓扑排序来编排课程void TopologicalSort_2(ALGraph G,int numterm,int maxcredit);拓扑排序来编排

11、课程4.2栈的定义#define STACk_INIT_SIZE 100 /存储空间的初时分配量#define STACKINCREMENT 10 /存储空间的分配增量typedef int ElemType;typedef structAdjList vertices;int vexnum, arcnum;ALGraph;基本操作:void InitStack (SqStack *S);栈的初始化int StackEmpty(SqStack S);判断栈是否为空void Push(SqStack *S, int );入栈操作int Pop(SqStack *S, int *e);出栈操作4.

12、3主程序和其他算法:#include#include#include / malloc()等#include / INT_MAX等#include / EOF(=Z或F6),NULL#include / atoi()52#include / eof()#include / floor(),ceil(),abs()#include / exit()#include / cout,cin/ 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1 typedef int Status;

13、 / Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; / Boolean是布尔类型,其值是TRUE或FALSE#define MAX_NAME 10 /* 顶点字符串的最大长度 */#define MAXCLASS 100int Z=0;int X=0;int xqzs,q=1,xfsx;typedef int InfoType;typedef char VertexTypeMAX_NAME; /* 字符串类型 */* 图的邻接表存储表示 */#define MAX_VERTEX_NUM 100typedef enumDGGraphKind;

14、 /* 有向图,有向网,无向图,无向网 */typedef struct ArcNodeint adjvex; /* 该弧所指向的顶点的位置 */struct ArcNode *nextarc; /* 指向下一条弧的指针 */InfoType *info; /* 网的权值指针) */ArcNode; /* 表结点 */typedef struct VertexType data; /* 顶点信息 */ ArcNode *firstarc; /* 第一个表结点的地址,指向第一条依附该顶点的弧的指针 */VNode,AdjListMAX_VERTEX_NUM; /* 头结点 */typedef s

15、tructAdjList vertices,verticestwo;int vexnum,arcnum; /* 图的当前顶点数和弧数 */int kind; /* 图的种类标志 */ALGraph;/* 图的邻接表存储的基本操作 */int LocateVex(ALGraph G,VertexType u) /* 初始条件: 图G存在,u和G中顶点有相同特征 */ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */int i;for(i=0;iG.vexnum;+i)if(strcmp(u,G.verticesi.data)=0)return i;return -1

16、;Status CreateGraph(ALGraph *G) /* 采用邻接表存储结构,构造没有相关信息的图G(用一个函数构造4种图) */int i,j,k;VertexType va,vb;ArcNode *p;printf(请输入教学计划的课程数: );scanf(%d,&(*G).vexnum);printf(请输入拓扑排序所形成的课程先修关系的边数: );scanf(%d,&(*G).arcnum);printf(请输入%d个课程的代表值(%d个字符):n,(*G).vexnum,MAX_NAME);for(i=0;i(*G).vexnum;+i) /* 构造顶点向量 */ sca

17、nf(%s,(*G).verticesi.data);(*G).verticesi.firstarc=NULL;printf(请输入%d个课程的学分值(%d个字符):n,(*G).vexnum,MAX_NAME);for(i=0;i(*G).vexnum;+i) /* 构造顶点向量 */scanf(%s,(*G).verticestwoi.data);printf(请顺序输入每条弧(边)的弧尾和弧头(以空格作为间隔):n);for(k=0;kadjvex=j;p-info=NULL; /* 图 */p-nextarc=(*G).verticesi.firstarc; /* 插在表头 */(*G

18、).verticesi.firstarc=p;return OK;void Display(ALGraph G) /* 输出图的邻接矩阵G */int i;ArcNode *p;switch(G.kind)case DG: printf(有向图n);printf(%d个顶点:n,G.vexnum);for(i=0;iG.vexnum;+i)printf(%s ,G.verticesi.data);printf(n%d条弧(边):n,G.arcnum);for(i=0;iadjvex.data);p=p-nextarc;printf(n);void FindInDegree(ALGraph G,

19、int indegree) /* 求顶点的入度,算法调用 */int i;ArcNode *p;for(i=0;iG.vexnum;i+)indegreei=0; /* 赋初值 */for(i=0;iadjvex+; p=p-nextarc; typedef int SElemType; /* 栈类型 */ /*栈的顺序存储表示 */ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */ #define STACKINCREMENT 2 /* 存储空间分配增量 */ typedef struct SqStack SElemType *base; /* 在栈构造之

20、前和销毁之后,base的值为NULL */ SElemType *top; /* 栈顶指针 */ int stacksize; /* 当前已分配的存储空间,以元素为单位 */ SqStack; /* 顺序栈 */ /* 顺序栈的基本操作 */ Status InitStack(SqStack *S) /* 构造一个空栈S */ (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!(*S).base) exit(OVERFLOW); /* 存储分配失败 */ (*S).top=(*S).base; (*S).s

21、tacksize=STACK_INIT_SIZE; return OK;Status StackEmpty(SqStack S) /* 若栈S为空栈,则返回TRUE,否则返回FALSE */ if(S.top=S.base) return TRUE; else return FALSE; Status Pop(SqStack *S,SElemType *e) /* 若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR */ if(*S).top=(*S).base) return ERROR; *e=*-(*S).top; return OK; Status Push(S

22、qStack *S,SElemType e) /* 插入元素e为新的栈顶元素 */ if(*S).top-(*S).base=(*S).stacksize) /* 栈满,追加存储空间 */ (*S).base=(SElemType *)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(SElemType); if(!(*S).base) exit(OVERFLOW); /* 存储分配失败 */ (*S).top=(*S).base+(*S).stacksize; (*S).stacksize+=STACKINCREMENT; *(*S

23、).top)+=e; return OK; typedef int pathoneMAXCLASS;typedef int pathtwoMAXCLASS;Status TopologicalSort(ALGraph G) /* 有向图G采用邻接表存储结构。若G无回路,则输出G的顶点的一个拓扑序列并返回OK, */ /* 否则返回ERROR。 */ int i,k,j=0,count,indegreeMAX_VERTEX_NUM; SqStack S; pathone a; pathtwo b; ArcNode *p; FindInDegree(G,indegree); /* 对各顶点求入度i

24、ndegree0.vernum-1 */ InitStack(&S); /* 初始化栈 */ for(i=0;inextarc) /* 对i号顶点的每个邻接点的入度减1 */ k=p-adjvex; if(!(-indegreek) /* 若入度减为0,则入栈 */ Push(&S,k); if(countG.vexnum) printf(此有向图有回路n); return ERROR; else printf(为一个拓扑序列。n); while(q=xqzs) int C=0; if(X=G.arcnum) while(C=xfsx) C+=*G.verticestwoZ.data; +Z;

25、 printf(第%d个学期应学课程:,q); while(X=Z) cout*G.verticesX.data ; +X; coutendl; q+; else cout课程编制已经完成!endl; return OK; return OK;void main() ALGraph f; printf(教学计划编制问题的数据模型为拓扑排序AOV-网结构。n); printf(以下为教学计划编制问题的求解过程:n); printf(请输入学期总数:); scanf(%d,&xqzs); printf(请输入学期的学分上限:); scanf(%d,&xfsx); CreateGraph(&f);

26、Display(f); TopologicalSort(f);5.用户使用和说明使用VC+,打开教学计划编制问题.cpp文件,接着编译,无错误,然后重建也没有错误,最后执行该文件。显示如下图:要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。然后还要输入课程先修课程总数,依据教科书图726,可以算出有16种关系,分别输出如下图所示。接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里(如上图)。6.调试分析6.1实验过程中出现的问题及解决方法 我们在实验过程中遇到的最大难题是两个课程排序算法的编写。刚开始的时候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。经过三天的修改,终于写出了符合要求的排序算法。6.2测试数据学期总数:6;学分上限:10;该专业共开设12门课,课程号从01到12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。6.3测试结果(包含正确和错误的)正确测试结果:错误测试结果:6.4测试数据及程序运行情况输入的内容如下:课程编号课程名称 学分

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

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