数据结构(C++)课程设计报告--教学计划编制问题

合集下载

《教学计划编制问题》数据结构课程设计说明书

《教学计划编制问题》数据结构课程设计说明书

华北科技学院数据结构课程设计说明书班级计算B121小组成员: 成绩:小组成员: 成绩:小组成员: 成绩:设计题目: 教学计划编制问题设计时间: 2014.6.23 至2014.6.27指导教师:评语:评阅教师: _____________________________________目录设计总说明 0第1章绪论 (1)第2章教学计划编制问题陈述及需求分析 (2)2.1教学计划编制问题陈述 (2)2.2功能需求分析 (2)第3章系统设计 (3)3.1总体设计 (3)3.2主要模块简介 (5)第4章详细设计 (6)4.1数据结构 (6)4.3设计说明 (8)4.4算法说明 (8)第5章编码与调试 (12)5.1教学计划编制问题实例 (12)5.2程序运行结果 (14)第6章总结 (18)参考文献 (19)附录源程序 (20)教学计划编制问题设计总说明根据任务要求及对实际情况的了解,可知设计中需要定义先修关系的AOV网图中的顶点及弧边的结构体,采用邻接表存储结构,利用栈作辅助结构,在运行结果中将图的信息显示出来,利用先修关系将课程排序,最后解决问题——输出每学期的课程。

整个系统从符合操作简便、界面简洁、灵活、实用、安全的要求出发,完成教学计划编制问题的全过程,包括创建三个数据结构(邻接表存储结构、栈、拓扑排序)、数据的处理与计算、数据的分析、结果的输出。

本课程主要介绍了本课题的开发背景,所要完成的功能和开发的过程。

重点说明了系统的设计思路、总体设计、各个功能模块的设计与实现方法。

关键词:教学计划编制问题;数据结构;邻接表存储结构;栈;拓扑排序第1章绪论数据结构是研究数据元素之间的逻辑关系的一门课程,以及数据元素及其关系在计算机中的存储表示和对这些数据所施加的运算。

该课程设计的目的是通过课程设计的综合训练培养分析和编程等实际动手能力,系统掌握数据结构这门课程的主要内容。

本次课程设计的内容是教学计划编制问题,邻接表是图的一种链式存储结构。

数据结构c语言版课程设计

数据结构c语言版课程设计

数据结构c语言版课程设计数据结构是计算机科学中的一个重要概念,它研究数据的组织、存储和管理方式,以及数据之间的关系和操作。

在C语言中,数据结构是通过各种不同的数据类型和数据结构来实现的。

本文将以数据结构C语言版课程设计为标题,介绍数据结构在C语言中的基本概念、常用数据结构及其实现,并结合实例进行说明。

一、引言数据结构是计算机科学的基础,它为我们处理和管理数据提供了重要的支持。

C语言作为一种高效、灵活的编程语言,广泛应用于系统开发、嵌入式程序和算法实现等领域。

掌握C语言中的数据结构是每个程序员必备的基本功。

二、基本概念1. 数据类型在C语言中,数据类型是指数据的种类和对应的操作。

常见的数据类型包括整型、浮点型、字符型等。

数据类型的选择要根据实际需求进行,以提高程序的效率和可读性。

2. 变量变量是存储数据的基本单元,通过变量名来访问其中的数据。

在C 语言中,变量必须先定义后使用,定义变量时需要指定其数据类型。

3. 数组数组是一种存储相同类型数据的集合。

在C语言中,数组的声明需要指定数组的大小,可以通过下标来访问数组中的元素。

数组的大小是固定的,一旦定义就不能改变。

4. 结构体结构体是一种自定义的数据类型,可以将不同类型的数据组合在一起。

在C语言中,结构体的定义使用关键字"struct",通过"."操作符来访问结构体成员。

三、常用数据结构1. 链表链表是一种动态数据结构,它通过指针将不同的节点连接起来。

每个节点包含数据和指向下一个节点的指针。

链表的插入和删除操作比较灵活,但查找元素的效率比较低。

2. 栈栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。

在C语言中,可以使用数组或链表来实现栈。

3. 队列队列是一种先进先出(FIFO)的数据结构,只能在队尾插入元素,在队头删除元素。

在C语言中,可以使用数组或链表来实现队列。

4. 树树是一种分层结构的数据结构,由节点和边组成。

数据结构C语言版课设报告样本

数据结构C语言版课设报告样本

目录一、需求分析 (2)二、概要设计 (2)三、详细设计 (4)四、调试分析 (8)五、用户手册 (9)六、测试数据 (9)七、附录 (10)一、需求分析要求:本节是需求分析的部分,该节主要说明课程设计题目的具体要求,如:程序应具备的功能、程序设计时必须使用的数据结构(数组、动态链表、文件等)、程序运行时对输入输出格式的要求以及对程序运行性能的要求等,在撰写本节的文档时,对于以上的具体要求应详细地给出明确的说明。

⒈用栈的基本操作完成迷宫问题的求解,其中栈的基本操作作为一个独立的模块存在。

⒉以二维数组M[m+2][n+2]表示迷宫,M[i][j] 表示迷宫中相应(i,j)位置的通行状态(0:表示可以通行,1:表示有墙,不可通行),完成迷宫的抽象数据类型,包括出口、入口位置等。

⒊用户从屏幕上输入迷宫,完成对应迷宫的初始化。

⒋迷宫的入口位置和出口位置在合法范围内由用户而定。

⒌程序完成对迷宫路径的搜索,如果存在路径,则以长方形形式将迷宫打印出来,用特定符号标出迷宫的物理状态,其中字符“#”表示不可行,“*”表示出口和入口,空格表示没有经过的部分,“◆”标记出可行的路径;如果程序完成搜索后没有找到通路,则提示用户“can’t find one way!”。

⒍程序执行的命令:⑴创建初始化迷宫;⑵搜索迷宫;⑶输出搜索结果。

二、概要设计要求:概要设计是在理解程序的各项需求以后,对程序的结构和模块进行设计的环节。

该节主要说明的内容包括对程序中所使用数据结构的介绍(如数组、数组表示的意义、数组的名称、结构体的名称,结构体成员表示的意义,文件的名称等)、对程序中主要模块以及模块之间关系的介绍(即程序由哪些模块组成,模块之间有何种关系等),在撰写本节的文档时,对于以上的具体内容给出详尽的说明。

⒈设计栈的抽象数据类型定义:ADT Stack {数据对象:D={ai:|ai∈PositionSet,i=1…n,n≥0}数据关系:R1={<ai-1,ai>|ai-1,ai∈d,i=2,…n}基本操作:操作结果InitStack(&S) 构造一个空栈,完成栈的初始化SDestoryStack(&S) 撤消一个已经存在的栈SClearStack(&S) 将栈S重新置空StackLength(S) 返回栈的长度GetTop(S,&e) 用e返回栈S的栈顶元素StackEmpty(S) 若S为空返回1,否则返回0Push(&S,e) 将新的元素e压入栈顶Pop(&S,e) 删除栈顶元素,并用e返回其值StackTraverse(s) 将栈S的所有元素输出}ADT Stack;⒉迷宫的抽象数据类型定义:ADT Maze{数据对象:D:={aij,Start,end|aij,Start,end∈{} 0≤i≤m+2,0≤j≤n+2,m,n≥0}数据关系:R={ROW.COL}Row={<ai-1j,aij>|ai-1,aij∈D i=1,…,m+2,j=1,…,n+2}Col={<aij-1,aij>|aijaij-1∈D}基本操作:SetMaze(&Maze)初始条件:Maze已经定义,Maze的下属单元二维数组Maze.M[row+2][d+2]已存在,Maze.start,Maze.end也已作为下属存储单元存在操作结果:构成数据迷宫,用数值标识迷宫的物理状态,以0表示通路,以1表示障碍,由终端读取迷宫空间大小,各点处的具体物理状态及Start和End点位置,完成迷宫构建Pass(&Mazem,&Nposition,Position,di)初始条件:已知目前迷宫状态及当前位置、下一步探索方向di操作结果:完成相应的搜索任务,如果可行,则用Nposition返回下一步位置,并将Maze状态改变为相应点已走过情况PrintMaze(Maze)操作结果:输出字符标示的迷宫FindWay(Maze,&way)操作结果:利用Pass搜索迷宫,用way返回搜索所得路径。

数据结构课程设计——教学计划编制

数据结构课程设计——教学计划编制

摘要教学计划(课程计划)是课程设置的整体规划,它规定不同课程类型相互结构的方式,也规定了不同课程在管理学习方式的要求及其所占比例,同时,对学校的教学、生产劳动、课外活动等作出全面安排,具体规定了学校应设置的学科、课程开设的顺序及课时分配,并对学期、学年、假期进行划分。

根据一定的教育目的和培养目标制定的教学和教育工作的指导文件。

它决定着教学内容总的方向和总的结构,并对有关学校的教学、教育活动,生产劳动和课外活动校外活动等各方面作出全面安排,具体规定一定学校的学科设置、各门学科的教学顺序、教学时数以及各种活动等。

教学计划、教学大纲和教科书互相联系,共同反映教学内容。

近代以来,特别是在实行学科课程的条件下,教学计划主要是学科的计划,或只是学科表。

随着社会经济和科学技术的新发展,教育结构不断发生变革,现代教育和教学理论主张对教学计划的结构实行改革。

除了教学以外,生产劳动、科技活动、发展体力和增进健康的活动、艺术活动和社会活动等也应列入教学计划。

下面就利用对此进行程序设计,已达到预期的目的。

关键字:数据结构,教学计划编制,抽象数据类型,程序设计1. 需求分析根据课程之间的依赖关系制定课程安排计划,输入课程数及课程之间的关系。

需要利用代码实现排序,以及对各个学期课程安排进行排序并输出。

1.1问题描述大学的每个专业都要制定教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等,每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。

每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。

每门课恰好占一个学期。

试在这样的前提下设计一个教学计划编制程序。

1.2设计思路首先利用拓扑排序对课程先后顺序进行分析,邻接表位主要存储结构,栈为主要辅助结构,给出课程之间的先后关系比如AOV网,然后进行拓扑排序,但当又向图中存在环时,无法查找该图的一个拓扑排序,当图中的所有顶点全部输出,表示对该图排序成功,实现拓扑排序算法时,相应的建立邻接表存储AOV网,为了避免重复检测入度为零的顶点,建立一个栈来对入度为零的顶点进行存放。

安排教学计划c语言数据结构课程设计

安排教学计划c语言数据结构课程设计

安排教学计划c语言数据结构课程设计下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!本店铺为大家提供各种类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you! In addition, this shop provides you with various types of practical materials, such as educational essays, diary appreciation, sentence excerpts, ancient poems, classic articles, topic composition, work summary, word parsing, copy excerpts, other materials and so on, want to know different data formats and writing methods, please pay attention!设计C语言数据结构课程教学计划1. 引言在计算机科学领域中,数据结构是一门重要的学科,它研究数据的组织、存储和管理方式,对于编程和算法设计至关重要。

数据结构C语言实验教程课程设计 (2)

数据结构C语言实验教程课程设计 (2)

数据结构C语言实验教程课程设计一、课程介绍该课程为数据结构专业的C语言实验教程,旨在培养学生的代码编写能力、算法思维能力、问题解决能力以及团队协作能力。

本课程为全英文授课,学生需具备一定的C编程基础和英语水平。

二、课程设计任务本课程的课程设计任务是让学生在团队合作的情况下设计并实现一个基于C语言的数据结构算法实现。

设计实现的项目应该具有一定的实用性,例如可以解决实际生活中的问题,或者可以应用于工程实践中。

三、课程设计考核方式本课程的课程设计考核方式为实验报告的形式,每个小组需要提交一份包含以下内容的实验报告:1.项目描述:介绍项目的背景、目的、功能及应用场景。

2.系统设计:包括数据结构选型、算法设计、模块划分等。

3.系统实现:包括代码实现、界面设计等。

4.系统测试:包括测试用例设计及测试结果、测试方法与测试环境的描述。

5.小组分工与贡献:介绍小组成员的分工和贡献情况,以及小组合作中如何处理困难与不同意见。

实验报告将以小组为单位进行评分,评分标准为项目实用性、代码质量、设计思路、测试结果及团队合作等方面的表现。

四、课程内容与进度安排章节内容完成时间第1章课程介绍及环境搭建第1周第2章线性表的设计与实现第2周 - 第4周第3章栈与队列的设计与实现第5周 - 第6周第4章树与二叉树的设计与实现第7周 - 第8周第5章图的设计与实现第9周 - 第11周第6章排序与查找算法的设计与实现第12周 - 第14周第7章综合设计实验第15周 - 第17周五、参考书籍1.《数据结构与算法分析C语言描述》2.《C语言程序设计:现代方法(第2版)》3.《C Primer Plus(第5版)》六、课程总结通过本课程的学习与实践,学生将会掌握基本数据结构的设计与实现、常用算法的实现方法、团队合作的方法与技巧。

这些都是成为一名出色的程序员或软件工程师所必备的素质与能力。

同时,本课程还将为学生将来的学习与工作提供扎实的基础与技能,为其踏上更高层次的学术研究或职业发展之路打下坚实的基础。

数据结构c课程设计

数据结构c课程设计

数据结构c课程设计一、课程目标知识目标:1. 理解数据结构的基本概念,掌握线性表、树、图等常见数据结构的特点与应用场景。

2. 学会使用C语言实现数组、链表、栈、队列、二叉树等基本数据结构及其相关操作。

3. 掌握排序和查找算法的基本原理,并能够运用C语言编写相应的程序。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,能够根据问题需求选择合适的数据结构进行问题求解。

2. 培养学生具备良好的编程习惯,提高代码的编写质量和效率。

3. 培养学生通过查阅资料、与他人合作等方式,自主学习和解决问题的能力。

情感态度价值观目标:1. 培养学生对数据结构的学习兴趣,激发学生主动探索和创新的热情。

2. 培养学生具备团队协作精神,学会与他人共同分析问题、解决问题。

3. 培养学生认识到数据结构在计算机科学中的重要性,理解其在现实生活中的广泛应用,提高学生的信息素养。

课程性质:本课程为高年级计算机专业核心课程,旨在使学生掌握数据结构的基本知识,培养其编程能力和解决实际问题的能力。

学生特点:学生已经具备一定的C语言基础,具有较强的逻辑思维能力和编程能力,但可能对数据结构的理解和应用尚不熟练。

教学要求:结合学生特点,注重理论与实践相结合,通过案例分析和实际操作,使学生能够掌握数据结构的基本概念和操作方法,提高其解决实际问题的能力。

同时,注重培养学生的团队合作精神和情感态度价值观。

在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。

二、教学内容1. 数据结构基本概念:介绍数据结构的基本概念、分类及其在计算机科学中的应用。

教材章节:第1章 数据结构概述2. 线性表:讲解线性表的定义、特性,以及数组、链表两种实现方式。

教材章节:第2章 线性表3. 栈和队列:介绍栈和队列的基本概念、实现方法及其应用场景。

教材章节:第3章 栈和队列4. 树和二叉树:讲解树和二叉树的基本概念、遍历方法、二叉树的应用等。

教材章节:第4章 树和二叉树5. 图:介绍图的基本概念、存储结构、遍历算法以及最短路径、最小生成树等算法。

数据结构课程设计c

数据结构课程设计c

数据结构课程设计c一、课程目标知识目标:1. 让学生掌握C语言实现常见数据结构(如线性表、栈、队列、二叉树等)的基本原理和操作方法。

2. 使学生了解各类数据结构在实际应用中的优缺点,并能根据问题特点选择合适的数据结构。

技能目标:1. 培养学生运用C语言编写数据结构相关程序的能力,能够实现基本的数据结构操作。

2. 培养学生分析问题、设计算法和数据结构的能力,提高解决问题的实际操作能力。

情感态度价值观目标:1. 激发学生对数据结构学习的兴趣,培养良好的学习习惯和自主学习能力。

2. 培养学生的团队合作意识,让学生在讨论和分享中学会尊重他人,提高沟通能力。

3. 使学生认识到数据结构在计算机科学中的重要性,培养其创新精神和实践能力。

课程性质分析:本课程为高年级计算机科学与技术专业的核心课程,旨在让学生深入理解数据结构的基本原理,掌握C语言实现数据结构的方法,提高编程能力和解决问题的能力。

学生特点分析:学生已具备一定的C语言基础和编程能力,但可能对数据结构的应用和实现尚不熟悉。

因此,课程设计应注重理论与实践相结合,引导学生从实际问题出发,培养其解决复杂问题的能力。

教学要求:1. 结合课本内容,设计具有实际意义的数据结构案例,让学生在实践中掌握理论知识。

2. 注重启发式教学,引导学生主动思考、分析和解决问题,提高学生的创新能力和实践能力。

3. 强化团队合作,鼓励学生相互讨论、分享经验,提高课程教学效果。

二、教学内容1. 线性表- 教材章节:第2章 线性表- 内容安排:介绍线性表的定义、性质和实现方法,包括顺序存储和链式存储;实现线性表的基本操作,如插入、删除、查找等。

2. 栈和队列- 教材章节:第3章 栈和队列- 内容安排:讲解栈和队列的基本概念、性质及操作;实现栈和队列的存储结构和基本算法;探讨栈和队列在实际应用中的使用场景。

3. 串- 教材章节:第4章 串- 内容安排:介绍串的定义、存储结构及模式匹配算法;掌握KMP算法及其应用。

c数据结构课程设计

c数据结构课程设计

c 数据结构课程设计一、课程目标知识目标:1. 让学生掌握数据结构的基本概念,包括线性表、栈、队列、树、图等;2. 使学生了解不同数据结构的特点、应用场景及其操作方法;3. 引导学生理解数据结构在算法设计中的重要性,培养学生分析问题、选择合适数据结构解决问题的能力。

技能目标:1. 培养学生运用数据结构解决实际问题的能力,学会编写相关程序代码;2. 提高学生运用所学知识进行算法分析与设计的技能,具备一定的调试与优化程序的能力;3. 培养学生团队合作意识,学会在团队中发挥个人优势,共同完成项目任务。

情感态度价值观目标:1. 培养学生对数据结构课程的兴趣,激发学习热情,形成积极向上的学习态度;2. 引导学生认识到数据结构在计算机科学领域的重要性,增强学生的专业认同感;3. 培养学生勇于探索、不断创新的精神,提高学生的逻辑思维能力和解决问题的能力。

课程性质:本课程为计算机科学与技术专业的核心课程,旨在让学生掌握数据结构的基本知识,培养学生解决实际问题的能力。

学生特点:学生具备一定的编程基础,但对数据结构的概念和具体应用尚不熟悉,需要通过实践加深理解。

教学要求:结合实际案例,注重理论与实践相结合,强调动手实践,提高学生的实际操作能力和解决问题的能力。

在教学过程中,将课程目标分解为具体的学习成果,以便进行教学设计和评估。

二、教学内容1. 线性表:介绍线性表的定义、特点及实现方法,包括顺序存储和链式存储,重点讲解线性表的插入、删除和查找等基本操作。

教材章节:第二章 线性表内容安排:2学时2. 栈与队列:讲解栈和队列的基本概念、性质及操作方法,分析它们在实际应用中的使用场景。

教材章节:第三章 栈与队列内容安排:2学时3. 树与二叉树:介绍树的定义、性质和存储结构,重点讲解二叉树的概念、遍历方法以及常见的二叉树,如二叉搜索树、平衡二叉树等。

教材章节:第四章 树与二叉树内容安排:4学时4. 图:讲解图的定义、存储结构及相关算法,包括深度优先搜索、广度优先搜索、最短路径、最小生成树等。

数据结构课程设计报告书教学计划编制问题

数据结构课程设计报告书教学计划编制问题

数据结构课程设计报告书教学计划编制问题题目:制定教学计划1.内容摘要摘要:首先利用拓扑排序对课程先后顺序进行分析,邻接表为主要存储结构,栈为主要辅助结构。

给出课程的先后关系,即AOV网,然后进行拓扑排序,但当有向图中存在环时,无法查找该图的一个拓扑排序。

当图中所有定点全部输出,表示对该图排序成功。

实现拓扑排序算法时,相应的建立邻接表存储AOV网。

为了避免重复检测入度为零的顶点,建立一个栈来对入度为零的点进行存放。

根据课程先后关系,对各个学期的课程进行拓扑排序,输出。

2.索引关键词关键词:邻接表存储,栈的应用,拓扑排序。

目录1.题目要求及设计要求------------------------------------------ 12.系统完成功能及功能框图----------------------------------- 2—43.核心算法及说明------------------------------------------ 5—214.运行及测试结论----------------------------------------- 22—235.参考资料-------------------------------------------------- 236.后记------------------------------------------------------- 23第一部分:课程设计题目要求1.1课程设计目的大学的每个专业都要制定教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。

每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。

每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。

每门课恰好占一个学期。

在这样的前提下设计一个教学计划编制程序。

1.2课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。

教学计划编制问题数据结构课程设计

教学计划编制问题数据结构课程设计

信息科学与工程学院数据结构课程设计课程设计名称: 教学计划编制问题前言《数据结构》是一门综合性较强的计算机软件、程序设计理论和技术相结合的重要基础课程。

它主要讨论抽象数据关系和算法在计算机中的表示与实现,涉及到的数据在计算机中的表示、组织和处理,以及相应结构上的算法设计和算法性能上的分析技术。

它所包含的知识与提倡的技术方法,无论对大家进一步学习计算机领域里的其他课程,还是对今后从事理论研究、应用开发及技术管理工作都起着重要的作用。

如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法的分析和评价。

通过学习《数据结构》这门理论性强、思维抽象、难度较大的课程后,大家就更深入透彻地理解数据结构的逻辑结构和物理结构的基本概念以及有关算法,培养了基本的、良好的程序设计技能,大家就能编制高效可靠的程序,更重要的也培养大家解决实际问题的能力,提高分析设计能力和编程能力,为大家后续课程的学习及实践也打下了良好的基础。

因此,学校开设了《数据结构(C语言版)》,通过学习数据结构,大家对编程有了更多的了解,为了让大家将自己所学的知识应用到实际当中,学校开设了数据结构课程设计,通过这次课程设计大家可以更好地将C语言应用到实际当中,而且可以更好的掌握算法与数据结构,将数据结构和C语言有效的结合起来,使大家的编程能力得到更大的提高。

关键字:C语言数据结构目录前言 ------------------------------------------- 2一、课题内容和设计要求 -------------------------------- 41.1 课题内容 --------------------------------------- 41.2 设计要求 --------------------------------------- 4二、课题需求分析-------------------------------------- 6三、课题实现模块设计 ---------------------------------- 63.1 程序模块设计 ----------------------------------- 63.2 函数的调用关系 --------------------------------- 7四、模块的功能实现 ------------------------------------ 74.1相关数据类型的定义 ------------------------------ 74.2主要函数的流程图------------------------------- 8五、程序调试 ---------------------------------------- 105.1 测试数据 ------------------------------------ 10 5.2 调试过程 ------------------------------------- 10 六.程序设计总结 ----------------------------------- 13七、附录 -------------------------------------------- 157.1致谢 ----------------------------------------- 157.2参考书目--------------------------------------- 157.3源程序清单 ------------------------------------- 15一、课程内容与要求1.1课题内容[ 问题描述 ]大学的每个专业都要制定教学计划。

数据结构教学计划编制问题课程设计

数据结构教学计划编制问题课程设计

课程设计(论文)题目名称教学计划编制问题课程名称数据结构学生姓名杨满平学号**********系、专业信息工程系、2010级计算机科学与技术指导教师黄同成2011年12 月25 日摘要数据结构是计算机科学与技术专业的专业基础课,是一门十分重要的核心课程。

数据结构的知识为后续专业课程的学习提供必要的知识和技能准备,学好“数据结构”这门课程,对于学习计算机专业的其他课程,如操作系统、编译原理、数据库管理系统、软件工程、人工智能等都是十分有益的,而且所有的计算机系统软件和应用软件都要用到各种类型的数据结构。

因此,要想更好地运用计算机来解决实际问题,仅掌握几种计算机程序设计语言是难以应付众多复杂的课题的,要想有效地使用计算机、充分发挥计算机的性能,还必须学习和掌握好数据结构的有关知识。

例如本次程序设计题目大学的每个专业都要制订教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限均相等。

每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。

每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。

每门课恰好占一个学期。

试在这样的前提下设计一个教学计划编制程序AbstractData structures in computer science and technology professional courses, is a very important core curriculum. The data structure knowledge for the following courses to provide the knowledge and skills necessary to prepare, learn" data structure" of the course, for learning other computer science courses, such as operating system, compiler theory, database management system, software engineering, artificial intelligence, are very useful, and all of the computer system software and the application of software to use various types of data structure. Therefore, in order to better use the computer to solve practical problems, only to grasp some computer programming language is hard to cope with the many complex issues, in order to effectively use computers, give full play to the computer's performance, also must learn and master some knowledge about data structure.For example, the program design of University of each professional should develop teaching plans. The assumption that any profession has a fixed length, each school year with two semesters, each semester and the length of time equal to the credit limit are. Each professional courses are determined, and the creation of curriculum time arrangements must meet prevocational relations. Each course which is a pre-determined curriculum, can have any number of doors, there will be No. Each class just for a semester. Test this premise in the design of a teaching plan programming目录一、课题的主要功 (1)1.1程序的功能 (1)1.2.输入输出的要求 (1)1.3运行环境 (1)1.4开发工具 (1)二、概要设计 (2)2.1程序的模块组成 (2)2.2模块的层次结构及调用关系 (2)2.3模块的主要功能 (3)2.4数据结构和数据库结构 (3)三.主要功能的实现 (3)3.1采用C语言定义相关的数据类型。

数据结构实验报告十—教学计划编制问题

数据结构实验报告十—教学计划编制问题

问题描述:若用有向网表示教学计划,其中顶点表示某门课程,有向边表示课程之间的先修关系(如果A课程是B课程的先修课程,那么A到B之间有一条有向边从A 指向B)。

试设计一个教学计划编制程序,获取一个不冲突的线性的课程教学流程。

(课程线性排列,每门课上课时其先修课程已经被安排)。

基本要求:(1)输入参数:课程总数,每门课的课程号(固定占3位的字母数字串)和直接先修课的课程号。

(2)若根据输入条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。

一、需求分析:本程序需要基于图的基本操作来实现二、概要设计:抽象数据类型:为实现上述功能需建立一个结点类,线性表类,图类。

算法的基本思想:1、图的构建:建立一个结点类,类的元素有字符型变量用来存储字母,整形变量用来存储位置,该类型的指针,指向下一个元素。

建立一个线性表类,完成线性表的构建。

建立一个图类,完成图的信息的读取,(如有n个点,则建立n 个线性表,将每个结点与其指向的结点组成一个线性表,并记录线性表的长度)。

2、Topsort算法:先计算每个点的入度,保存在数组中。

找到第一个入度为0的点,将该点所连的各点的入度减一。

再在这些点中找入度为0 的点。

如果找到,重复上述操作。

如果找不到,则跳出while循环,再搜索其他的点,看入度是否为0。

再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。

程序的流程程序由三个模块组成:输入模块:读入图的信息(顶点和边,用线性表进行存储)。

处理模块:topsort算法。

输出模块:将结果输出。

三、详细设计算法的具体步骤:class Node{ead->node=ch;line[i].head->position=i;}}void pushEdge(){ ead->node==ch1)pos1=j; ead->node==ch2){pos2=line[j].head->position;break;}}line[pos1].insert(pos2,ch2);}}void topsort(){ ead;while(p->next!=NULL){d[p->next->position]++; ead->node<<" ";m++;Node* p=line[j].head;while(p->next!=NULL){k=p->next->position;d[k]--;ead->node=ch;line[i].head->position=i;}}void pushEdge(){ ead->node==ch1)pos1=j; ead->node==ch2){pos2=line[j].head->position;break;}}line[pos1].insert(pos2,ch2);}}void topsort(){ ead;while(p->next!=NULL){d[p->next->position]++; ead->node<<" ";m++;Node* p=line[j].head;while(p->next!=NULL){k=p->next->position;d[k]--; //当起点被删除,时后面的点的入度-1if(d[k]==0){d[k]=top;top=k;}p=p->next;}}}cout<<endl;if(m<numVertex) //输出点的个数小于输入点的个数,不能完全遍历 cout<<"网络存在回路"<<endl;delete []d;}};int main(){int n,m;cout<<"请输入节点的个数和边的个数"<<endl;cin>>n>>m;Graph G(n,m);();();();system("pause");return 0;}。

数据结构c语言版课程设计

数据结构c语言版课程设计

数据结构C语言版课程设计介绍本文档旨在介绍数据结构C语言版课程设计的要求和注意事项,帮助学生顺利完成本次课程设计。

本次课程设计要求学生综合应用数据结构相关知识,设计并实现一个功能完备的程序,以达到对数据结构知识的深入理解和应用。

要求1.设计实现一个简单的图书管理系统,包括以下功能:–图书录入,在添加新书时要重复判断图书是否已经存在–图书删除,要求同时删除图书的借书记录–图书借阅,需要判断图书是否在库–图书归还,需要判断图书是否被他人借阅–图书查询,可以根据书名、作者等信息进行查询,并展示图书的相关信息2.程序中至少需要使用以下数据结构:–数组–链表–栈或队列3.程序中需要使用文件进行数据的读写操作,可以使用二进制或文本文件存储数据。

4.界面设计可以使用控制台进行简单的输出展示,也可以使用图形界面进行展示。

5.程序中需要有异常处理机制,对用户的不当行为进行提示或警告。

6.程序的整体设计应该注重代码的重用性、可读性、可维护性、可扩展性以及可靠性。

注意事项1.学生可以自行设计图书管理系统的具体功能及界面,但需考虑到程序的实际应用和用户体验。

2.学生可以借鉴相关资料进行学习和参考,但需要注意防止抄袭,严禁抄袭他人的代码。

如若发现抄袭现象,将取消相关成绩。

3.学生完成本次课程设计后,需要编写一份实验报告,详细记录程序设计过程及程序的具体实现方法。

实验报告需包含以下内容:–概要介绍:描述程序用途、设计思路和实现效果;–功能介绍:详细阐述程序实现的各个功能,包括功能说明、相关数据结构的应用等;–系统结构:详细描述程序的整体结构,包括模块划分、流程控制等;–实现过程:记录设计及实现过程中遇到的问题及解决方法;–结论:总结本次课程设计的收获和不足,提出后续改进和完善的方向与建议。

4.学生在完成课程设计过程中,要注意代码的规范和注释。

代码要求格式清晰、缩进一致、命名规范、注释清晰明了,方便其他人进行阅读和理解。

总结本文档简要介绍了数据结构C语言版课程设计的要求和注意事项,鼓励学生在本次课程设计中积极发挥创造力,尽力完成任务,并对学生提交的代码进行评估和指导,以期取得良好的设计成果和实践经验。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构(C++)课程设计报告--教学计划编制问题上海电力学院数据结构(C++)课程设计题目: 教学计划编制问题*名:***学号:********院系:计算机科学与技术学院专业年级:信息安全2011级2013年07月04日一、设计题目大学的每个专业都要编制教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限都相等。

每个专业开设的课程都是确定的,而且课程的开设时间的安排必须满足先修关系。

每个课程的先修关系都是确定的,可以有任意多门,也可以没有。

每一门课程恰好一个学期。

试在这样的情况下设置一个教学计划编制程序。

在大学的某个专业中选取几个课程作为顶点,通过各门课的先修关系来构建个图,该图用邻接表来存储,邻接表的头结点存储每门课的信息。

本程序的目的是为用户编排课程,根据用户输入的信息来编排出每学期要学的课程。

二、需求分析(一)运行环境(软、硬件环境)设计环境和器材——硬件:计算机软件:Microsoft Visula C++在本课程设计中,系统开发平台为Windows XP或Win 7,程序运行环境为Visual C++ 6.0,程序设计语言为C++。

Visual C++一般分为三个版本:学习版、专业版和企业版,不同版本适合于不同类型的应用开发。

实验中可以使用这三个版本的任意一种,在本课程设计中,以Visual C++ 6.0为编程环境。

Visual C++以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。

比如,它允许用户进行远程调试和单步执行等。

还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。

其编译及建置系统以预编译头文件、最小重建功能及累加链接著称。

这些特征明显缩短程式编辑、编译及链接的时间花费,在大型软件计划上尤其显著。

Visual C++ 6.0秉承Visual C++ 以前版本的优异特性,为用户提供了一套良好的开发环境,主要包括文本编辑器、资源编辑器、工程创建工具和Debugger调试器等等。

用户可以在集成开发环境中创建工程,打开工程,建立、打开和编辑文本,编译、链接、运行和调试应用程序。

(二)输入的形式和输入值的范围数据输入的方式是键盘输入。

输入的数据多是整型的或是浮点型的,还有一些字符(以中文的形式)。

输入的数值型的数据大都是小于100的数值。

(三)输出的形式描述输出的是教学编制计划,就是形如:“第二学期学的课程有:普通物理线性代数汇编语言”这样的形式。

(四)功能描述输入参数包括:学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。

计划的表格格式自行设计。

(五)测试数据学期总数:6学分上限:10该专业共开设12门课,课程号从01~12,学分顺序为2,3,4,2,2,4,4,4,7,5,2,3。

三、概要设计(一)抽象数据类型定义描述(对各类的成员及成员函数进行抽象描述,参见书或ppt及实验)抽象数据类型:为实现上述功能需建立一个结点类,线性表类,图类。

ADT Graph{数据对象V:V是具有相同特性的数据元素的集合,称为顶点集.数据关系R:R={VR}VR={(v,w)|v,w∈V,(v,w)表示v和w之间存在直接先修关系}基本操作P:void creatpre(AlGraph *CGraph);void findindegree(AlGraph *CGraph,int indegree[]);void layout1(AlGraph *CGraph,queue *q);void layout2(AlGraph *CGraph,queue *q);}ADT Graph队列的定义:ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,…n,n>=0}数据关系:R1={﹤ai-1 ai﹥|ai-1,ai∈D,i=2,…,n}基本操作:void queue_init(queue *q);void queue_in(queue *q,int x);int queue_out(queue *q);int queue_empty(queue *q);}ADT Stack(二)功能模块设计主程序:void main(){int choice;queue q;Queue.queue_init(&q);AlGraph CGraph;CGraph=Graph.input();system("cls");Graph.output(CGraph);cout<<endl<<endl;Judgement.judgingcricle(&CGraph,&q);if(!WhetherCricle){while(1){cout<<"请选择编排策略:\t"<<endl;cout<<"1.使学生在各学期中的学习负担尽量均匀;\t"<<endl;cout<<"2.使课程尽可能地集中在前几个学期中。

\t"<<endl;cout<<"请选择:";cin>>choice;system("cls");if(choice==1)yout1(&CGraph,&q);elseyout2(&CGraph,&q);cout<<"请选择继续编排策略或退出程序(0退出1继续):\t"<<endl;cin>>choice;system("cls");if(choice==0)break;}}}(三)模块层次调用关系本程序只有两个模块,调用关系简单主程序模块→拓扑排序模块TopSort流程图:所有顶点是否处理完?将入度为0的顶点入栈是否用数组OutLes 保存每次入栈的入度将当前结点的后输出课对每个学期的邻接表类成员函数否是否 是运行结束邻接表构造函数ALGraph运行初始化初始化边表,并在相应的结束邻接表ALGraph的构造函数四、详细设计教学计划编制系统主要是处理课程之间的依赖关系。

表列出了若干门计算机系本科课程,其中有些课程不要求先修课程,例如,C1是独立于其他课程的基础课,而有些课程却需要有先修课程,比如,学完程序设计语言C++和离散数课程代号课程名称先修课程C1 高等数学无C2 计算机科学导论无C3 离散数学C1C4 程序设计语言C++ C1、C2C5 数据结构C3、C4C6 计算机原理C2、C4C7 数据库原理C4、C5、C6先修课程规定了课程之间的依赖关系,这种关系可以用AOV网来表示,其中顶点表示课程,弧表示依赖关系。

程序的主要功能是实现课程的排序,以满足同一学期所修的课程相互之间无依赖关系,并且已修完其所有先修课程。

本程序需要基于图的基本操作来实现算法的基本思想:1、图的构建:建立一个结点类,类的元素有字符型变量用来存储字母,整形变量用来存储位置,该类型的指针,指向下一个元素。

建立一个线性表类,完成线性表的构建。

建立一个图类,完成图的信息的读取,(如有n 个点,则建立n 个线性表,将每个结点与其指向的结点组成一个线性表,并记录线性表的长度)。

2、Topsort 算法:先计算每个点的入度,保存在数组中。

找到第一个入度为0的点,将该点所连的各点的入度减一。

再在这些点中找入度为0 的点。

如果找到,重复上述操作。

如果找不到,则跳出while 循环,再搜索其他的点,看入度是否为0。

再重复上述操作,如果所有的入度为0的点都被寻找到,但个数少于输入顶点的个数,说明该图存在环。

3、 邻接表类的定义邻接表是一种顺序存储与链接存储相结合的存储方法。

在邻接表中存在两种结点结构:顶点表结点和边表结点。

五、调试分析包括调试过程中遇到的问题及解决的方法、算法的时间空间复杂性分析、经验体会。

(一)实验过程中出现的问题及解决方法我在实验过程中遇到的最大难题是两个课程排序算法的编写。

刚开始的时CCC CC CC nextadjv first v 表结点 点候没有任何的思路,网上也只有拓扑排序的算法,对于课程设计要求的排序算法没有任何头绪。

经过请教老师和同学以及翻阅了一些相关书籍,并在网上的搜索有了排序算法的大体思路。

经过三天的修改,终于写出了符合要求的排序算法。

(二)实验体会上机实践是学生对本门课程所学知识的一种全面、综合的能力训练,是与课堂听讲、自学和练习相辅相成必不可少的一个教学环节,也是对课堂教学效果的一种检验。

通常,实习题中的问题比平时的习题复杂得多,也更接近实际。

实习题注重原理与应用的结合,目的让学生学会如何把书上学到的知识运用于解决实际问题的过程中去,培养从事软件开发设计工作所必需的基本技能。

同时,通过实践能使书上的知识变“活”,起到深化理解和灵活掌握教学内容的作用。

平时的练习较偏重于如何编写功能单一的“小”算法,而实习题是软件设计的综合训练,包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,可以多人合作,有利于一整套软件工程规范的训练和科学作风的培养。

此外,实践环节中有很重要的一点,就是机器是比任何教师都严格的主考官。

经过此次课程设计,我认识到了理论与实践结合的重要性,仅仅只是从课本上学到算法原理是远远不够的。

在实践中,我们总会出现许多错误。

这就要求我们以一个脚踏实地的态度来处理问题。

我深刻地认识到自己写程序的不足,使我们学到了好多有用的知识,让我们明白了C++语言的语句用法。

六、测试结果要求输入学期总数、一个学期的学分上限、需要编排课程总数、课程名、课程号、该课程的学分,按照出现的每一步来输入该课程设计所提供的相关数据。

学期总数:6;学分上限:10;该专业共开设12门课,课程号从01到12,学分顺序为2,3,4,2,2,4,4,4,7,5,2,3。

然后还要输入课程先修课程总数,可以算出有16种关系,分别输出。

接着程序会根据这些数据,自动生成建立好的邻接表,用户可以根据系统显示的选择编排策略进行选择,有两种编排策略,最后结果体现在实验的正确测试结果里。

输入的内容如下:课程编号课程名称学分先决条件01 计算机基础 2 无02 离散数学 3 0103 数据结构 4 01,0204 汇编语言 2 0105 语言的设计和分析 2 03,0406 计算机原理 4 1007 编译原理 4 05,0308 操作系统 4 03,0609 高等数学7 无10 普通物理 5 0911 线性代数 2 0912 数值分析 3 09,11,01七、附录:程序设计源代码#include<iostream>#include<string>#include<cstdio>#include<cstdlib>using namespace std;#define null 0#define MAX_COURSE_NUM 100 //最大课程个数typedef struct{char c[3];}cid; //课程号typedef struct Course{cid id[3];char name[30];float xf;}Course; //课程typedef struct PreCourse{int adjvex;struct PreCourse *nextarc;}PreCourse; //先修的课程节点typedef struct{Course course;PreCourse *firstarc;}CourseNode; //课程节点typedef struct{CourseNode courses[MAX_COURSE_NUM]; //邻接表int xqs;int num;float xfsx;}AlGraph; //课程图typedef struct{int data[MAX_COURSE_NUM];int f,r;}queue;int WhetherCricle=0;int jxq;class Queue{public:void queue_init(queue *q);void queue_in(queue *q,int x);int queue_out(queue *q);int queue_empty(queue *q);}Queue;void Queue::queue_init(queue *q) //队初始化{q->f=q->r=0;}void Queue::queue_in(queue *q,int x) //入队{if((q->r+1)%MAX_COURSE_NUM==q->f){cout<<"队满\t"<<endl;exit(0);}q->r=(q->r+1)%MAX_COURSE_NUM;q->data[q->r]=x;}int Queue::queue_out(queue *q) //出队{if(q->f==q->r){cout<<"队空\t"<<endl;exit(0);}q->f=(q->f+1)%MAX_COURSE_NUM;return q->data[q->f];}int Queue::queue_empty(queue *q) //队判空 1为空{if(q->f==q->r)return 1;else return 0;}class Graph{public:AlGraph input();void output(AlGraph CGraph);void creatpre(AlGraph *CGraph);}Graph;void Graph::creatpre(AlGraph *CGraph) //建立先修关系{system("cls");int choice;int i,n;int j;PreCourse *p,*q;cout<<endl<<"建立先修关系:\t"<<endl;cout<<endl<<"输入的每一门课程号的编号:\t"<<endl;for(i=0;i<CGraph->num;i++){if(i%4==0)cout<<endl;cout<<"("<<i+1<<")"; //输入课程的编号printf("%s\t",CGraph->courses[i].course.id);}cout<<endl;cout<<"\n请根据以上的编号,输入每一门课程的先修课程号的编号(输入0 表示没有或结束):\t"<<endl;for(i=0;i<CGraph->num;i++){printf("%s的先修课程:",CGraph->courses[i].course.id);cin>>j;n=0;while(j) //判断输入的课程编号是否正确{while(j<1||j>CGraph->num||j==i+1){if(j==i+1)cout<<"先修课程号不可能是本课程号\n";elsecout<<"输入的先修课程号不在该专业开设的课程序列中"<<endl;cout<<"请重新输入:";cin>>j;}p=(PreCourse *)malloc(sizeof(PreCourse));p->adjvex=j-1;p->nextarc=null;if(n==0){CGraph->courses[i].firstarc=p;q=CGraph->courses[i].firstarc;n++;}else{q->nextarc=p;q=p;n++;}cin>>j;}}cout<<"(1)重新建立先修关系\t"<<"(2)确定\n";cout<<"请选择:";cin>>choice;if(choice==1)creatpre(CGraph);jxq=0;}AlGraph Graph::input() //输入并建立课程图{AlGraph CGraph;int xqzs=0,kczs=0;int i;int choice;float xf,xfsx=0;cout<<"教学计划编制\n"<<endl;cout<<"输入参数:\n";cout<<"1.学期总数:";cin>>xqzs;CGraph.xqs=xqzs;cout<<"2.专业共开设课程数:";cin>>kczs;CGraph.num=kczs;cout<<"3.学分上限(每个学期的学分上限都一样):";cin>>xfsx;CGraph.xfsx=xfsx;cout<<"4.每门课的课程号(固定占3位的字母数字串)、课程名、学分——"<<endl;for(i=0;i<kczs;i++) //输入课程号,课程名,学分{cout<<"课程号:";scanf("%s",CGraph.courses[i].course.id);cout<<"课程名:";scanf("%s",CGraph.courses[i]);cout<<"学分:";cin>>xf;cout<<endl;while(xf>xfsx||xf<=0) //判断输入的学分是否合格{cout<<"输入的学分有误,请重新输入学分:";cin>>xf;}CGraph.courses[i].course.xf=xf;CGraph.courses[i].firstarc=null;}cout<<"(1)重新输入\t"<<"(2)确定"<<endl;cout<<"请选择:";cin>>choice;if(choice==1){system("cls");input();}else{creatpre(&CGraph); //建立先修关系return CGraph;}}void Graph::output(AlGraph CGraph) ///输出先修关系{int i,j,n;PreCourse *p;cout<<"先修关系如下:\n"<<endl;cout<<"课程编号\t"<<"课程名称\t"<<"先决条件"<<endl;for(i=0;i<CGraph.num;i++){printf("%s\t\t%s\t\t",CGraph.courses[i].course.id,CGraph.courses[ i]);j=0;p=CGraph.courses[i].firstarc;while(p){n=p->adjvex;printf(" %s ",CGraph.courses[n].course.id);p=p->nextarc;j++;}if(j==0)cout<<" 无";cout<<endl;}}class Judgement{public:void findindegree(AlGraph *CGraph,int indegree[]);void judgingcricle(AlGraph *CGraph,queue *q2);}Judgement;void Judgement::findindegree(AlGraph *CGraph,int indegree[]){int i;PreCourse *p;for(i=0;i<CGraph->num;i++){indegree[i]=0;p=CGraph->courses[i].firstarc;while(p){indegree[i]++;p=p->nextarc;}}}void Judgement::judgingcricle(AlGraph *CGraph,queue *q2)//判断是否有环和课程入队{int indegree[MAX_COURSE_NUM]; //入度int i,m,j,pd=0;float xf=0;PreCourse *p;queue q;Queue.queue_init(&q); //队初始化findindegree(CGraph,indegree); //找入度for(i=0;i<CGraph->num;i++){if(indegree[i]==0&&(xf+CGraph->courses[i].course.xf)<=CGraph->xfsx){Queue.queue_in(&q,i);indegree[i]--;xf+=CGraph->courses[i].course.xf;}}m=0;xf=0;Queue.queue_in(&q,-1); //把-1入队用来判断jxq++;while(1){i=Queue.queue_out(&q);Queue.queue_in(q2,i);if(i!=-1){m++;for(j=0;j<CGraph->num;j++)if(j!=i){if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfsx){Queue.queue_in(&q,j);indegree[j]--;xf+=CGraph->courses[j].course.xf;}else{p=CGraph->courses[j].firstarc;while(p){if(p->adjvex==i){indegree[j]--;if(indegree[j]==0&&(xf+CGraph->courses[j].course.xf)<=CGraph->xfs x){Queue.queue_in(&q,j);indegree[j]--;pd=1;xf+=CGraph->courses[j].course.xf;}}p=p->nextarc;}}}}else{if(pd){pd=0;Queue.queue_in(&q,-1);jxq++;xf=0;}else break;}}if(jxq>CGraph->xqs){cout<<endl<<"错误报告:\n"<<"在"<<CGraph->xqs<<"学期内是无法修完这些课程"<<endl;exit(0);}if(m<CGraph->num){cout<<"\n错误报告:"<<endl;cout<<"存在循环,因此课程安排不了"<<endl;WhetherCricle=1;}Queue.queue_in(q2,-1);}class Edit{public:void layout1(AlGraph *CGraph,queue *q);void layout2(AlGraph *CGraph,queue *q);}Edit;void Edit::layout1(AlGraph *CGraph,queue *q){cout<<"\n学生在各学期中的学习负担尽量均匀:\n"<<endl;int i,j,k,xq=1,ck[20];float xf;float m=CGraph->num/CGraph->xqs*1.0f;queue q1=*q;int n;int x;n=0;ck[0]=-1;for(i=0;i<20;i++){j=Queue.queue_out(&q1);ck[i]=j;if(j==-1)i--;if((Queue.queue_empty(&q1)))break;}for(x=0;x<CGraph->xqs;x++){if(ck[0]!=-1){cout<<"\n第"<<xq++<<"学期学:";xf=0;for(i=0;i<m;i++){k=ck[n];printf(" %s ",CGraph->courses[k].course.id);n++;xf+=CGraph->courses[k].course.xf;}cout<<"获得学分是:"<<xf<<endl;}}}void Edit::layout2(AlGraph *CGraph,queue *q){cout<<"\n课程尽可能地集中在前几个学期中:\n"<<endl;int i,j,xq=1;float xf;cout<<"\n第"<<xq<<"学期学:";xq++;xf=0;queue q1=*q;for(i=1;i<=CGraph->num;){j=Queue.queue_out(&q1);if(j!=-1){printf(" %s ",CGraph->courses[j].course.id);i++;xf+=CGraph->courses[j].course.xf;}else{cout<<"获得学分是:"<<xf;cout<<"\n第"<<xq++<<"学期学:";xf=0;}}cout<<"获得学分是:"<<xf<<endl;if(xq<=CGraph->xqs){cout<<"\n第"<<xq++<<"学期学:无\n"<<endl;}}void main(){int choice;queue q;Queue.queue_init(&q);AlGraph CGraph;CGraph=Graph.input();system("cls");Graph.output(CGraph);cout<<endl<<endl;Judgement.judgingcricle(&CGraph,&q);if(!WhetherCricle){while(1){cout<<"请选择编排策略:\t"<<endl;cout<<"1.使学生在各学期中的学习负担尽量均匀;\t"<<endl;cout<<"2.使课程尽可能地集中在前几个学期中。

相关文档
最新文档