欢迎来到天天文库
浏览记录
ID:26207606
大小:238.00 KB
页数:13页
时间:2018-11-25
《算法课程设计25316》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、一、课程设计目的本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。通过这次设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。二、课程
2、设计内容[问题描述]针对计算机系本科课程,依据其相互依赖关系制定课程安排计划,其相互依赖关系如下图所示,并要求各学期课程数目大致相同且搭配适当。[基本要求](1)求解上图的拓扑排序结果。(2)上述课程在4学期上完,要求每学期上课的门数大致一样。[实现提示]在拓扑排序基础上作适当修改。三、课程设计过程1.需求分析根据课程之间的依赖关系制定课程安排计划,输入课程数及课程之间的关系,需要利用代码实现排序,以及对各个学期安排进行排序和输出。2.概要设计首先利用拓扑排序对课程先后顺序进行分析,邻接表为主要存储结构,对课程进行拓扑排序。为了实现上述程序功能,需要定义
3、邻接表表的抽象数据类型:#include"stdio.h"//输入输出#include"stdlib.h"//标准库#definemax_vertax_num20//表结点typedefstructnode{intadjvex;structnode*next;}nodetype;//表头结点typedefstructfrontnode{intdata;intd;structnode*next;}frontnodetype,adjlist[max_vertax_num];3.详细设计实现概要设计中定义的所有的数据类型,对每个操作给出伪码算法。对主程序和其他
4、模块也都需要写出伪码算法。StatusCreateGraph(ALGraph*G)(伪码算法)intLocateVex(ALGraphG,VertexTypeu)(伪码算法)voidDisplay(ALGraphG)(伪码算法)StatusTopologicalSort(ALGraphG)(伪码算法)4.调试分析(略)5.用户使用说明使用VC++,打开教学计划编制问题代码,接着编译,无错误,然后执行该文件,然后编译,根据相关提示输入相关信息,结果截屏出来。6.测试结果1.上图的拓扑排序结果。2.上述课程在4学期上完,要求每学期上课的门数大致一样。7.附录
5、求解上图的拓扑排序结果。源程序代码#include"stdio.h"//输入输出#include"stdlib.h"//标准库#definemax_vertax_num20//表结点typedefstructnode{intadjvex;structnode*next;}nodetype;//表头结点typedefstructfrontnode{intdata;intd;structnode*next;}frontnodetype,adjlist[max_vertax_num];//图的定义typedefstruct{adjlistvertices;in
6、tvexnum,arcnum;intkind;}algraph;//algraphcreatelist(){inti,j,k;nodetype*p;algraphg;printf("请输入顶点数和弧数:");scanf("%d%d",&g.vexnum,&g.arcnum);printf("请输入顶点信息:");for(i=1;i<=g.vexnum;++i){scanf("%d,%d",&g.vertices[i].data,&g.vertices[i].d);g.vertices[i].next=NULL;}printf("请输入表示弧7、,vj>的顶点序号i,j:");for(k=1;k<=g.arcnum;++k){scanf("%d,%d",&i,&j);p=(nodetype*)malloc(sizeof(nodetype));p->adjvex=j;p->next=g.vertices[i].next;g.vertices[i].next=p;}returng;}//创建拓扑排序inttoposort(algraph&g,intn){inti,j,k,m=0;inttop=0;nodetype*p;for(i=1;i<=n;i++)if(g.vertices[i].d==0)8、{g.vertices[i].d=top;top=i;}while(top!=0
7、,vj>的顶点序号i,j:");for(k=1;k<=g.arcnum;++k){scanf("%d,%d",&i,&j);p=(nodetype*)malloc(sizeof(nodetype));p->adjvex=j;p->next=g.vertices[i].next;g.vertices[i].next=p;}returng;}//创建拓扑排序inttoposort(algraph&g,intn){inti,j,k,m=0;inttop=0;nodetype*p;for(i=1;i<=n;i++)if(g.vertices[i].d==0)
8、{g.vertices[i].d=top;top=i;}while(top!=0
此文档下载收益归作者所有