数据结构课程设计——拓扑排序(共24页).docx
《数据结构课程设计——拓扑排序(共24页).docx》由会员分享,可在线阅读,更多相关《数据结构课程设计——拓扑排序(共24页).docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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日系主任(或责任教师)签名: 年 月 日拓扑排序目录1问题描述2具体设计2.1存储结构设计2.2主要算法设计 2.2.1拓扑排序的算法总体设
3、计2.2.2将有向图表示为邻接表2.2.3拓扑排序函数的设计2.2.4顺序表的运算设计2.3测试用例设计3调试报告 3.1设计和编码的分析3.2调试过程问题及解决4经验与体会5用户使用说明6参考文献7附录源代码与运行结果1问题描述题目:拓扑排序如果用有向图表示一个工程,在这种有向图中,用顶点表示活动,用有向边表示活动vi必须先于活动vj进行,这种有向图叫做顶点表示活动的网络,记作AOV网络。对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得AOV网络中的所有应存在前驱和后继的关系都能得到满足,这种构造AOV网络全部顶点的拓扑有序序列的运算叫做拓扑排序。在AOV-网中,不应该
4、出现有向环,用拓扑排序就可以判断网中是否有环,若网中所有顶点都在它的拓扑有序序列中,则该AOV-网必定不存在环。进行拓扑排序步骤如下:1、输入AOV网络即有向图。令n为顶点个数。2、从有向图上选择一个没有入度的节点并输出。3、从网中删去该点,同时删去从该顶点发出的全部有向边。4、重复上述2,3,直到(1)、全部顶点均已输出,拓扑有序序列形成,拓扑排序完成。(2)、图中还有未输出的顶点,但已跳出处理循环。这说明图中还剩下一些顶点,它们都有直接前驱,再也找不到没有前驱的顶点了,这时AOV网络中必定存在有向环。要求:(1)、采用邻接表作为有向图的存储结构;(2)、给出所有可能的拓扑序列。2具体设计2
5、.1存储结构设计本问题中,我将采用三种数据结构:邻接表,顺序表和数组。邻接表:邻接表是图的链式存储结构,在邻接表的存储结构中,图中的每个顶点对应一个单链表。从拓扑排序的步骤个方法来看,在整个排序过程中需要频繁地检查顶点的前驱以及作删除顶点和边的操作、恢复顶点和顶点前驱入度的操作。所以,可以采用邻接表作为有向无环图的存储结构。为了快速的判断顶点是否有前驱,可以在表头结点中增加一个“入度域(into)”用来指示顶点当前的入度。当into域的值为0时,表明该顶点没有前驱,可以加入到结果序列中。而删除顶点及以它为起点的边操作时,可以通过把该顶点的所有邻接点的入度域减一来完成,恢复则入度域加一。邻接表的
6、定义如下:typedef struct ARCNODE /表结点int adjvex; /邻接点的位置ARCNODE *nextarc;/指向下一个结点ARCNODE; /邻接表中的结点类型typedef struct VEXNODE /头结点int vexdata; /顶点信息int into; /每个顶点的入度ARCNODE *firstarc; /指向第一个邻接结点VEXNODE,AdjListMAX;/邻接表的表头结点类型typedef structAdjList vexs; /表头结点数组int vexnum,arcnum;/顶点数、边数ALGraph; /邻接表类型顺序表:在整个拓
7、扑排序的过程中,把满足条件(在此轮中未访问过visitedi=0以及入度为0)的顶点加入到顺序表的末尾,使last加1。当一轮排序结束后,输出顺序表中的排序。接着,是恢复部分,每恢复一步,都要把visiti置0并且相应的入度加1,把这个顶点从顺序表中删除,重新加入到图中,进行下一轮的拓扑排序。邻接表的顺序表定义如下:typedef struct VEXNODE dataMAX;int last;Sequenlist; /顺序表类型数组:产生所有的拓扑排序是一个递归(回溯)过程。其中,定义的visitedMAX数组是一个辅助变量,数组元素的初值为0,当第i个顶点被访问后,便置visitedi为1
8、.记录该顶点是否被访问过。VisitedMAX;2.2主要算法设计 2.2.1拓扑排序的算法总体设计 因为这个课程设计题目是让AOV网络产生所有的拓扑排序,所以我想必然要用到递归或者回溯的思想。 考虑到要不断的对数据进行删除,恢复,所以考虑了顺序表,单链表,堆栈,发现用顺序表删除和插入都很简单,好实施,只要在表尾插入或是删除即可。在整个过程中主要用到三部分:一、从图中删除,添加到顺序表中;二、递归;三、把删除的顶点和边恢复到图中并从顺序表中删除。首先,在整个图中搜索即没有被访问过而且入度为0 的顶点Vi,进行拓扑排序。在拓扑排序的函数里,首先将这个顶点加入到顺序表中,然后将这个顶点标志为被访问
9、过,即Visitedi=1。把以这个顶点为起点的邻接点的入度均减1.然后,判断顺序表的表长是否等于图的顶点数。如果不相等的话,则继续判断图中是否还存在满足拓扑排序条件的顶点,若存在就再次调用拓扑排序函数。接下来,就是使刚排序过的顶点Vi的标志恢复到原始状态0,每个以Vi为起点的邻接点的入度加1,恢复到原来的状态。把顶点Vi从顺序表中删除。如果,顺序表的表长等于图的顶点数,那么就输出这一种拓扑排序序列。计数器count加1之后,就是采用递归,不断的调用拓扑排序函数,不断的恢复、删除,直到排出所有的拓扑序列。 最后,如果count大于0的话,那么就输出有count种拓扑排序。否则,输出此图不是AO
10、V网,无拓扑排序序列产生。开始置空顺序表A,表长赋初值0用邻接表建立图G,调用G=creat_AdjlistGraph();或者 i赋初值0初始化标志数组,visitedi置0i的值递增1iG.顶点数?J赋初值0Visitedj=0且Vj入度为0?调用函数Topusort(G, L, i);j的值递增1j 0?此图不是AOV网,无拓扑排序序列结束YNNY该图有count种排序YNYN2.2.2将有向图表示为邻接表在产生拓扑排序的算法设计中,首先要将有向图用邻接表表示,主要流程如下:开始定义表头结点数组 al输入顶点数n和边数e输入e条边的起点值j 和终点值 k将Vk的入度加一,并将结点Vk加入
11、到链表中;边数从0到e初始化al 的各项值:ali.vexdata=i; ali.into=0; ali.firstarc=NULL;(i=0 to 图的顶点数)定义图 algn = alg.vexnum 顶点数;e = alg.arcnum 边数 i赋初值0将al中的值、入度、指针 分别赋给图alg中数组vexs的.各值;i的值递增1i结点数n?NY结束2.2.3拓扑排序函数的设计开始插入SqLinsert( L, vexsi)标志数visitedi赋初值0Vi 指向第一个结点指针PP !=NULL?P 指向顶点 VjVj 的入度减 1P 指向链表下一结点顺序表长=顶点数?输出Output
12、(L )计数器Count加1;K赋初值0调用函数Topusort( L, G, k );Visitedk= =0且Vk 入度为0? K的值递增1klast+1赋初值0插入:SqLinsert(L,vexsi)删 除:SqLdelete(L,vexsi);输出:output(L);表长加 1 即L-last+1把结点X赋给顺序表最后一位L-rL-last表长减 1;L-last-1I赋初值0输出Vi I的值递增1i表长?结束NY2.3测试用例设计1234图11234图23416752图3312456 图4 3调试报告 3.1设计和编码的分析 1、邻接表实现拓扑序列shixian()在本函数里,首
13、先定义一个顺序表,然后把它置空。接着,以邻接表创建一个图,并且把它赋给图G。接着,把全局变量数组visited初始化。对于整个图中,没被访问过的而且入度为0的顶点进行拓扑排序。如果常量count等于0的话,说明图有回路,不能拓扑排序。否则,在拓扑排序函数中会输出所有的拓扑排序序列。void shixian() Sequenlist A,*L=&A; L=(Sequenlist *)malloc(sizeof(Sequenlist); Setnull(L); ALGraph G; G=creatGraph(); for(int n=1;n=G.vexnum;n+) visitedn=0; int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 拓扑 排序 24
限制150内