资源描述:
《教学方案计划编制问答课程教学设计报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、中北大学数据结构与算法课程设计说明书 学院、系:软件学院专业:软件工程学生姓名:学号:设计题目:教学计划编制问题起迄日期:2013年12月9日-2013年12月20日指导教师: 2013年12月20日1需求分析1.在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息.2.本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程.3.测试数据:学期总数:6;学分上限:9;本专业共开设12门课,课程号从C00到C11,学分顺序为2,3,4,3,2,3,4,4,7,5
2、,2,3。2概要设计1.抽象数据类型图的定义如下:ADTGraph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R:R={VR}VR={(v,w)
3、v,w∈V,(v,w)表示v和w之间存在直接先修关系}基本操作P:voidCreatGraph(ALGraph*);voidFindInDegree(ALGraph,int*);intTopologicalOrder(ALGraphG,AdjListR,structNamename[])intLocateVex(ALGraphG,VertexTypeu)/*查找图中某个顶点位置*/}
4、ADTGraph2.栈的定义如下:ADTStack{数据对象:D={ai
5、ai∈ElemSet,i=1,2,…n,n>=0}数据关系:R1={﹤ai-1ai﹥
6、ai-1,ai∈D,i=2,…,n}基本操作:voidInitStack(SqStack*S);intStackEmpty(SqStackS);voidPush(SqStack*S,int);intPop(SqStack*S,int*e);}ADTStack3.本程序有两个模块,调用关系简单:主程序模块 →拓扑排序模块3系统完成功能及功能框图end采用第二种策略:使课程尽可能地集中在前几个学期
7、中根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体创建图CreateGraph():结合先修关系的AOV网,采用邻接链表存储菜单OUTPUT():显示代号所对应课程及课程的先修课程前插法main拓扑排序TopoSort(G):将课程排序后并决定出每学期所学课程输出图G的信息Display(G):将图的顶点和弧边输出图3.1系统功能框图0C11^5^11^111067^6^4^72^1134^9^1C22C33C44C55C66C7^7C8^8C99C1010C1111C12^图3.2邻接表对每个顶点求入度,并存入数组InDegree[i]中
8、(i=0…n)初始化栈Stack,Counter=0ReturnOKReturnERROR依次将入度为0的顶点存入栈中对以i号顶点为尾弧的每个邻接点的入度减1,并将入度减1后为零的顶点号压入栈中,输出i,计数器加1(Counter++)推出栈顶的一个元素(入度为零的顶点号)至i,输出i,计数器加1(Counter++)堆栈是否为空?n个顶点全输出YYNYNY图3.3拓扑排序流程图C1C4C5C7C2C3C8C9C12C10C11C6图3.4课程先修关系图4详细设计1.图的邻接表的存储表示,即结构体的定义:typedefstructArcNode{in
9、tAdjOfV;//该弧所指向的顶点的位置structArcNode*next;//指向下一条弧的指针}ArcNode;typedefcharVertexType[MAXOfNAME];typedefstruct//链接表{VertexTypedata;//顶点信息intgrades;//存储学分信息ArcNode*first;//指向第一条依附该顶点的弧的指针}VNode,AdjList[MAX_VER];//头结点typedefstruct{AdjListver;//vertices存储课程名intvexnum,arcnum;//图的当前顶点数和
10、弧数}ALGraph;2.建立图的邻接链表:printf("请输入下列课程的先修课程(无先修课程输入0结束后也输入0)");for(h=0;hAdjOfV=j;p->next=G.ver[i].firs
11、t;//插在表头G.ver[i].first=p;scanf("%s",va);getchar();}3.输