欢迎来到天天文库
浏览记录
ID:47518137
大小:181.61 KB
页数:23页
时间:2020-01-12
《数据结构课程设计——拓扑排序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、武汉理工大学《数据结构课程设计》课程设计任务书学生姓名:专业班级:指导教师:工作单位:计算机科学系题目:拓扑排序初始条件:(1)采用邻接表作为有向图的存储结构;(2)给出所有可能的拓扑序列。(3)测试用例见严蔚敏《数据结构习题集(C语言版)》p48题7.9图要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:1.问题描述简述题目要解决的问题是什么。2.设计存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;3.调试报告调试过程中遇到
2、的问题是如何解决的;对设计和编码的讨论和分析。4.经验和体会(包括对算法改进的设想)5.附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这些测试数据和运行输出。说明:1.设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。2.凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。时间安排:1.第17周完成,验收时间由指导教师指定2.验收地点:实验中心3.验收内容:可执行程序与源代码、课程设计报告书。指导教师签名:2013年6月14日系主任(或责任教师)签名:年月日23武汉理工大学《数据结构课程设
3、计》拓扑排序目录1问题描述2具体设计2.1存储结构设计2.2主要算法设计2.2.1拓扑排序的算法总体设计2.2.2将有向图表示为邻接表2.2.3拓扑排序函数的设计2.2.4顺序表的运算设计2.3测试用例设计3调试报告3.1设计和编码的分析3.2调试过程问题及解决4经验与体会5用户使用说明6参考文献7附录源代码与运行结果23武汉理工大学《数据结构课程设计》1问题描述题目:拓扑排序如果用有向图表示一个工程,在这种有向图中,用顶点表示活动,用有向边表示活动vi必须先于活动vj进行,这种有向图叫做顶点表示活动的网络,记作AOV网络。对一个有向
4、无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得AOV网络中的所有应存在前驱和后继的关系都能得到满足,这种构造AOV网络全部顶点的拓扑有序序列的运算叫做拓扑排序。在AOV-网中,不应该出现有向环,用拓扑排序就可以判断网中是否有环,若网中所有顶点都在它的拓扑有序序列中,则该AOV-网必定不存在环。进行拓扑排序步骤如下:1、输入AOV网络即有向图。令n为顶点个数。2、从有向图上选择一个没有入度的节点并输出。3、从网中删去该点,同时删去从该顶点发出的全部有向边。4、重复上述2,3,直到(1)、全部顶点均已输出,拓扑有序序列形成,拓扑排序完成。
5、(2)、图中还有未输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,它们都有直接前驱,再也找不到没有前驱的顶点了,这时AOV网络中必定存在有向环。要求:(1)、采用邻接表作为有向图的存储结构;(2)、给出所有可能的拓扑序列。2具体设计2.1存储结构设计本问题中,我将采用三种数据结构:邻接表,顺序表和数组。<1>邻接表:邻接表是图的链式存储结构,在邻接表的存储结构中,图中的每个顶点对应一个单链表。从拓扑排序的步骤个方法来看,在整个排序过程中需要频繁地检查顶点的前驱以及作删除顶点和边的操作、恢复顶点和顶点前驱入度的操作。所以,可以采用邻接表作为有
6、向无环图的存储结构。23武汉理工大学《数据结构课程设计》为了快速的判断顶点是否有前驱,可以在表头结点中增加一个“入度域(into)”用来指示顶点当前的入度。当into域的值为0时,表明该顶点没有前驱,可以加入到结果序列中。而删除顶点及以它为起点的边操作时,可以通过把该顶点的所有邻接点的入度域减一来完成,恢复则入度域加一。邻接表的定义如下:typedefstructARCNODE{//表结点intadjvex;//邻接点的位置ARCNODE*nextarc;//指向下一个结点}ARCNODE;//邻接表中的结点类型typedefstructVEXNO
7、DE{//头结点intvexdata;//顶点信息intinto;//每个顶点的入度ARCNODE*firstarc;//指向第一个邻接结点}VEXNODE,AdjList[MAX];//邻接表的表头结点类型typedefstruct{AdjListvexs;//表头结点数组intvexnum,arcnum;//顶点数、边数}ALGraph;//邻接表类型<2>顺序表:在整个拓扑排序的过程中,把满足条件(在此轮中未访问过visited[i]=0以及入度为0)的顶点加入到顺序表的末尾,使last加1。当一轮排序结束后,输出顺序表中的排序。接着,是恢复
8、部分,每恢复一步,都要把visit[i]置0并且相应的入度加1,把这个顶点从顺序表中删除,重新加入到图中,进行下一轮的拓扑
此文档下载收益归作者所有