教学编制问题c语言数据结构实现_第1页
教学编制问题c语言数据结构实现_第2页
教学编制问题c语言数据结构实现_第3页
教学编制问题c语言数据结构实现_第4页
教学编制问题c语言数据结构实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数据结构课程设计报告主题:教学计划编制问题班级:计科四班姓名:熊金莲指导老师:郭艳内容概要题目要求教学计划编制问题的要点函数模块及各函数可实现的功能简介具体的源代码使用说明实验心得一:题目要求如下:大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。要求(1)输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)学分和直接先修课的课程号。(2)允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式自行设计。二:教学计划编制问题的要点:根据问题描述及要求,可知设计中需要定义先修关系的AOV网图中的顶点及弧边的结构体,在运行结果中将图的信息显示出来,利用先修关系将课程排序,最后解决问题——输出每学期的课程。采用第二种策略:使课程尽可能地集中在前几个学期中;根据教学计划中的课程及其关系和学分定义图的顶点和边的结构体创建图CreateGraph():结合先修关系的AOV网,显示代号所对应课程及课程的先修课程4)拓扑排序TopologicalOrder(G):将课程排序后并决定出每学期所学课程,输出图G的信息Display(G):将图的顶点和弧边输出三:程序模块及可实现的功能简介:1)、图的邻接表的存储表示,即结构体的定义typedefstructArcNode{ intAdjOfV;ata);scanf("%s",va);getchar();while(va[0]!='0'){i=LocateVex(G,va);irst;irst=p;scanf("%s",va);getchar();}}3)、输出图的顶点和边printf("%d个顶点",;for(i=0;i<;++i)printf("%4s",[i].data);printf("\n%d条弧边:\n",;for(i=0;i<;i++){p=[i].first;while(p) {printf("%s---->%s\n",[i].data,[p->AdjOfV].data);p=p->next;}}4)、通过栈实现拓扑排序intTopologicalOrder(ALGraphG,AdjListR,structNamename[]){ inti,k,j=0,count,indegree[MAX_VER]; SqStackS; ArcNode*p; FindInDegree(G,indegree);ata,[i].grades); R[j++]=[i];irst;p;p=p->next)rades; printf("\n第%d个学期应学课程:",q); while(C<=MaxScores) { C=C+R[Z+1].grades; if(Z< { CmpOfStr(R[Z].data,name,N);/*让C1~C12分别与12门课程对应起来*/ ++Z; } } printf("\n"); if(q==TotalOfTerms)printf("\nOKOver!"); q++; } return1;/**/}拓扑排序要点:依次将入度为0的顶点存入InDegree中,对每个顶点求入度,并存入数组InDegree[i]中(i=0…n),初始化栈Stack,Counter=0,对以i号顶点为尾弧的每个邻接点的入度减1,并将入度减1后为零的顶点号压入栈中,输出i,计数器加1(Counter++),推出栈顶的一个元素(入度为零的顶点号)至i,输出i,计数器加1(Counter++),堆栈是否为空,n个顶点全输出,依次将入度为0的顶点存入InDegree中5)根据学分上限决定出每学期应学课程,其中R[]中存储的是经过拓扑排序后的课程先后顺序。 intq=1,Z=0; while(q<=TotalOfTerms) { intC=R[Z].grades; printf("\n第%d个学期应学课程:",q); while(C<=MaxScores) {C=C+R[Z+1].grades; if(Z< {CmpOfStr(R[Z].data,name,N);/*让C1~C12分别与12门课程对应起来*/ ++Z;} } printf("\n"); if(q==TotalOfTerms)printf("\nOKOver!"); q++; }四:具体的源代码本程序分为三部分A:#defineStackofNUM20ata)==0)returni;return-1;}intCreateGraph(ALGraph&G)/*采用邻接表存储结构*/{inti,j,h;VertexTypeva;ArcNode*p;printf("请输入教学计划的课程数:");scanf("%d",&; getchar();printf("请输入各个课程的先修课程的总和(弧总数):");scanf("%d",&; getchar();printf("请输入%d个课程的课程号(最多%d个字符,字母+数字如C10):",,MAXOfNAME);for(i=0;i<;++i){scanf("%s",&[i].data); getchar();[i].first=NULL;}printf("请输入%d个课程的学分值:",;for(i=0;i<;++i){scanf("%d",&[i].grades);getchar();}printf("请输入下列课程的先修课程(无先修课程输入0结束后也输入0)\n");for(h=0;h<;++h)ata);scanf("%s",va);getchar();while(va[0]!='0'){i=LocateVex(G,va);irst;irst=p;scanf("%s",va);getchar();}}return1;}voidDisplay(ALGraphG)/*输出图G的信息*/{inti;ArcNode*p;printf("有向图\n");printf("%d个顶点",;for(i=0;i<;++i)printf("%4s",[i].data);printf("\n%d条弧边:\n",;for(i=0;i<;i++){p=[i].first;while(p) {printf("%s---->%s\n",[i].data,[p->AdjOfV].data);p=p->next;}}}voidFindInDegree(ALGraphG,intindegree[])/*求顶点的入度*/{inti;ArcNode*p;for(i=0;i<;i++)indegree[i]=0;for(i=0;i<;i++){p=[i].first;while(p){indegree[p->AdjOfV]++;p=p->next;}}}structName{charc[20];}name;voidCmpOfStr(VertexTypestr,structNamename[],intn)/*让C1~C12分别与12门课程对应起来*/{if(strcmp(str,name[0].c)==0)printf("程序设计基础");if(strcmp(str,name[1].c)==0)printf("离散数学");if(strcmp(str,name[2].c)==0)printf("数据结构");if(strcmp(str,name[3].c)==0)printf("汇编语言");if(strcmp(str,name[4].c)==0)printf("语言的设计和分析");if(strcmp(str,name[5].c)==0)printf("计算机原理");if(strcmp(str,name[6].c)==0)printf("编译原理");if(strcmp(str,name[7].c)==0)printf("操作系统");if(strcmp(str,name[8].c)==0)printf("高等数学");if(strcmp(str,name[9].c)==0)printf("线性代数");if(strcmp(str,name[10].c)==0)printf("普通物理");if(strcmp(str,name[11].c)==0)printf("数值分析");C::::::::::::::::::教学计划编制问题.Cpp#include<>#include<>#include<>#include<>#include""#include""#defineN12intTopologicalOrder(ALGraphG,AdjListR,structNamename[]){ inti,k,j=0,count,indegree[MAX_VER]; SqStackS; ArcNode*p; FindInDegree(G,indegree);ata,[i].grades); R[j++]=[i];irst;p;p=p->next)rades; printf("\n第%d个学期应学课程:",q); while(C<=MaxScores) { C=C+R[Z+1].grades; if(Z< { CmpOfStr(R[Z].data,name,N);/*让C1~C12分别与12门课程对应起来*/ ++Z; } } printf("\n"); if(q==TotalOfTerms)printf("\nOKOver!"); q++; } return1;/**/}voidmain(){ ALGraphG; AdjListR; structNamenam

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论