欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    教学计划编制数据结构课程设计报告Word文档下载推荐.docx

    • 资源ID:17017777       资源大小:635.79KB        全文页数:30页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    教学计划编制数据结构课程设计报告Word文档下载推荐.docx

    1、14六 附录16七 参考文献23一、需求分析1、设计任务问题描述大学的每个专业都要制定教学计划。假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。每门课恰好占一个学期。试在这样的前提下设计一个教学计划编制程序。实现提示输入参数应包括:学期总数,一学期的学分上限,每门课的课程号(可以是固定占3位的字母数字串)、学分和直接先修课的课程号。应允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中

    2、在前几个学期中。若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。计划的表格格式可以自己设计。可设学期总数不超过12,课程总数不超过100。如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。2、功能模块图CreateGraph():构造图 InitStack():构造一个空栈 StackEmpty():判断是否为空栈 Push():入栈Pop():出栈 FindInDegree():求顶点的入度TopologicalSort():输出G顶点的拓扑排序结果3、流程图(具体流程图见详细设计伪码流程)4、目标测试正确测试:错误测试:二、详细设计1、运行环

    3、境:(1)WINDOWS 7系统(2)C-Free 5.02、开发工具: C语言3、涉及知识点:(1)栈。用到有关栈的操作有初始化栈、判断栈是否为空、入栈和出栈。其中栈主要用来存放入度为零的顶点,即当前无先修关系可以编排的课程。(2)图。用到有关图的操作有创建图、统计图中各顶点的入度。利用邻接表作为有向图的存储结构,且在头结点中增加一个存放顶点入度的数组(indegree)。入度为零的顶点即为没有前驱的顶点,删除顶点及以它为尾的弧的操作,则可换以弧头顶点入度减一来实现。(3)拓扑排序。 (a)在有向图中选一个没有前驱的顶点且输出之。 (b)从图中删除该顶点和所有以它为尾的弧。重复上述两步,直至

    4、全部顶点均已输出,或者当前图中不存在无前驱的顶点为止,后一种情况则说明有向图中存在环。4、数据结构定义及基本操作A.所用存储结构及宏定义:#define MAX_VERTEX_NUM 100 /最大课程总数#define STACK_INIT_SIZE 100 /存储空间的初始分配量#define STACKINCREMENT 10 /存储空间的分配增量/图的邻接表存储表示typedef struct ArcNode int adjvex;/该弧所指向顶点的位置 struct ArcNode *nextarc;/指向下一条弧的指针ArcNode;typedef struct VNode cha

    5、r name24;/课程名 int classid; /课程号 int credit;/课程的学分 int indegree;/该结点的入度 int state;/该节点的状态,1代表已学,0代表未学 ArcNode *firstarc; /指向第一条依附该顶点的弧的指针VNode,AdjListMAX_VERTEX_NUM;typedef struct AdjList vertices;/顶点向量 int vexnum,arcnum;/图的当前顶点数和弧数ALGraph;typedef int ElemType;/栈的顺序存储表示typedef struct /栈 ElemType *bas

    6、e; ElemType *top; int stacksize;SqStack;B.程序中各函数的简要说明:(1)void CreatGraph(ALGraph &G)构建图。先输入各顶点(课程)的信息,包括课程名、课程号、课程学分。再输入弧信息(先修关系),将弧中顶点赋为弧尾,相应入度加1.最后输出构建好的邻接表。(2)void InitStack(SqStack &S)构造空栈int StackEmpty(SqStack &S)判断是否为空栈void Push(SqStack &S,int e)入栈 int Pop(SqStack &S, int *e)出栈(3)void FindInDe

    7、gree(ALGraph G, int indegree)求图中各节点的入度。从每个节点的第一条依附于该节点的弧出发,将该节点对应的入度加1,接着指向下一条弧执行同样的操作,直至指针为空。(3)void TopologicalSort_1(ALGraph G,int numterm,int uplcredit)按课程尽可能集中到前几个学期进行编排。当每个学期的学分总数不超过学分上限时,在有向图中选一个没有前驱的顶点(课程)且输出之。从图中删除该顶点(课程)和所有以它为尾的弧。当某学期的学分已满时,进入下一学期的编排。重复上述几步,直至全部顶点(课程)均已输出,或者当前图中不存在无前驱的顶点(课

    8、程)为止,后一种情况则说明有向图中存在环。(4)void TopologicalSort_2(ALGraph G,int numterm,int uplcredit)按课程尽量均匀分布编排。当每个学期的学分总数不超过学分上限且课程数不超过课程数上限时,在有向图中选一个没有前驱的顶点(课程)且输出之。当某学期的学分已满或课程数已满时,进入下一学期的编排。(5)int main()主函数。在主函数中输出交互界面,要求用户输入各项信息。调用CreateGraph函数创建图,之后根据用户选择调用TopologicalSort_1或者TopologicalSort_2函数进行拓扑排序并输出编排结果,写入

    9、文件中。5、函数调用关系图6、伪码流程G) (2)void FindInDegree(ALGraph G, int 构造图 indegree)求图中各节点的入度(4)void TopologicalSort_1 (5)void TopologicalSort_2 (ALGraph G,int numterm, (ALGraph G,int numterm, int uplcredit) int uplcredit)有向图G采用邻接表存储结构 有向图G采用邻接表存储结构(6)Main主函数三、调试分析1、调试过程中遇到的问题与解决方法我在实验过程中遇到的最大难题是两个课程排序算法的编写。刚开始的

    10、时候没有任何的思路,书上、网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。经过三天的修改,终于写出了符合要求的排序算法。在设计过程中,我的程序有不少漏洞,例如在选择一次编排后,按任意键就会退出,不可以继续选择编排策略,经过一系列的修改,成功地将程序添加选择是否继续的功能。2、算法的时空分析对有n个顶点和e条弧的有向图而言,将建立求各顶点的入度的时间复杂度为O(e);建立入度定点栈的时间复杂度为O(n),在拓扑排序过程中,若有向图无环,则每个顶点进一次栈,出一次栈,入度减1的操作在while语句中总

    11、共执行e次,所以,总的时间复杂度为O(n+e)。3、改进思想A.程序界面有很大的改进空间,可设计更简洁美观的界面。B.输入数据比较繁琐,分步太多,可编写程序进行改善,如一步输入课程名、课程号、学分。C.课程号为01,02等形式,也可改为C1、C2的形式。4、经验体会在这次课设中,我进行了大量的资料查阅,包括上网查询和求助老师同学,对所学知识进行复习。通过这些努力,我对数据结构这门课程有了新的认识,对编程的步骤,有了具体的体会。更重要的是,这个课题完全脱离于只限于书本上的问题,多用在实际生活当中,让我对计算机行业,充满了信心和自豪。以往我们学的计算机知识一般停留在理论上,这让我们不太理解计算机的

    12、应用和前景,而较少注重我们对算法的实践锻炼。而这一次的实习既需要我们去联系理论,又需要我们去实践方法,很多东西看上去都学过,但是和实际联系才知道变通的艰难。书上得来的并不是一切,大多还是需要在其它方面去吸收的,这是我这次课设的最大收获。这次的实验让我们知道该如何跨过实际和理论之间的鸿沟。四、用户手册1、按照提示输入各个数据(如下图):包括:学期总数,一学期的学分上限,编排课程总数,每门课的课程名、课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。课程名课程号学分先修关系程序设计基础01无离散数学023数据结构0301,02汇编语言04语言的设计和分析0503,04计算机原理06编译原

    13、理0705,03操作系统0803,06高等数学097线性代数10普通物理数值分析1209,10,01先修顺序有向图:2、屏幕上会显示您输入的数据,确认无误后选择方案(如下图):3、选择方案后会进行计算并输出,之后可根据需要选择是否继续(如下图):五、测试结果1、输入2、输出策略1:bianpai1.txt策略2:bianpai2.txt六、附录源程序清单及其说明如下:#include stdio.hmalloc.h#define STACKINCREMENT 10 /存储空间的分配增量void CreateGraph(ALGraph &G)/构建图 int i, m, n; ArcNode *

    14、p; printf(请输入需要编排课程总数:); scanf(%d,&G.vexnum); for( i=1;i=G.vexnum;i+) printf(n请输入课程名: scanf(%sG.verticesi.name);n请输入课程号:G.verticesi.classid);n请输入该课程的学分:G.verticesi.credit); G.verticesi.indegree=0; G.vertices i.state=0;/NOTSTUDY G.verticesi.firstarc=NULL; 请输入课程先修关系总数:G.arcnum);请顺序输入每个课程先修关系(先修课程在前并以逗

    15、号作为间隔):n for (i = 1; i = G.arcnum; i+)n请输入存在先修关系的两个课程的序号:%d,%dn,&m); while (nG.vexnum|mG.vexnum) printf(输入的顶点序号不正确请重新输入: scanf( p = (ArcNode*)malloc(sizeof(ArcNode); if (p = NULL)memory allocation failed,goodbey return; p-adjvex = m;nextarc=G.verticesn.firstarc; G.verticesn.firstarc = p;n建立的邻接表为:/输出

    16、建立好的邻接表 for(i=1;%d:-,G.verticesi.classid); for(p=G.verticesi.firstarc;p!=NULL;p=p-nextarc)%d-,p-adjvex);NULLvoid InitStack(SqStack &S) S.base=(int *)malloc(STACK_INIT_SIZE*sizeof(int); if (!S.base) ERROR return; S.top=S.base; S.stacksize=STACK_INIT_SIZE; if(S.top=S.base) return 1; else return 0;S,in

    17、t e) if(S.top-S.base=S.stacksize) S.base=(int*)realloc(S.base,(S.stacksize+10)*sizeof(int); if(! S.top=S.base+S.stacksize; S.stacksize+=10; *S.top+=e;int Pop(SqStack &S, int *e) *e=*-S.top; return 0;void FindInDegree(ALGraph G, int indegree)/求图中各节点的入度 int i;= G.vexnum; indegreei = 0; while (G.vertic

    18、esi.firstarc) indegreeG.verticesi.firstarc-adjvex+; G.verticesi.firstarc = G.verticesi.firstarc-nextarc;void TopologicalSort_1(ALGraph G,int numterm,int uplcredit) FILE *fp; fp=fopen(bianpai1.txt,w struct ArcNode *p; SqStack S; int indegreeMAX_VERTEX_NUM;/存放各节点的入度 int i,j,k; int count; /课程编括排数目计数器 i

    19、nt sumcredit;/每个学期的课程学分累加器 FindInDegree(G,indegree); G.verticesi.indegree=indegreei; InitStack(S); count=0; k=0; while(count!=G.vexnum & k=numterm) sumcredit=0; for(i=1;i+) if(G.verticesi.indegree=0)&(G.verticesi.state=0)/入度为零的节点入栈,即无先修的课程入栈 Push(S,i); G.verticesi.state =1;/避免入度为零节点重复入栈 if(!StackEmpty(S)&(sumcredit=uplcredit) k= k+1; printf(第%d个学期学得课程有:,k); sumcredit = 0; for(i=1; if(G.verticesi.indegree=0)&(G.verticesi.state=0)/入度为零的节点入栈,即无先修的课程入栈 Push(S,i); while(!uplcredit)/栈非空&学分总数小于总学分上限


    注意事项

    本文(教学计划编制数据结构课程设计报告Word文档下载推荐.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开