数据结构课程设计:有向图拓扑排序算法的实现(共22页).docx
《数据结构课程设计:有向图拓扑排序算法的实现(共22页).docx》由会员分享,可在线阅读,更多相关《数据结构课程设计:有向图拓扑排序算法的实现(共22页).docx(22页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上数据结构课程设计设计说明书有向图拓扑排序算法的实现学生姓名樊佳佳学号班级网络工程1301成绩指导教师申静数学与计算机科学学院2016年1月4日课程设计任务书 20152016学年第一学期课程设计名称: 数据结构课程设计 课程设计题目: 图的拓扑排序算法的实现 完 成 期 限:自 2015年 12月20日至 2016年 1 月 3 日共 2 周设计内容:1、设计任务(1)给出一个有向无环图,遍历所有的节点;(2)能够实现对所有顶点的拓扑;(3)界面友好,可操作性强。2、需求分析对系统的功能及性能要求进行分析,写出需求规格说明书(可行性分析报告、系统的分层DFD图)。3、
2、软件设计软件设计分两个阶段进行:总体设计和详细设计;总体设计:确定系统总体设计方案,完成系统的模块结构图及模块的功能说明;详细设计:对模块内部过程及数据结构进行设计,以及进行数据库设计、用户界面设计等编写出该项目的详细设计报告;4、具体编码编写程序,要求给出详细的注释,包括:模块名、模块功能、中间过程的功能、 变量说明等。同时编写用户使用手册、程序模块说明等文档;5、软件测试所有测试过程要求采用综合测试策略:先作静态分析,再作动态测试。应事先制订测试计划,并要求保留所有测试用例,完成测试报告。指导教师:申静 教研室负责人:申静课程设计评阅评语: 指导教师签名: 年 月 日专心-专注-专业摘 要
3、设计了一个对有向图进行拓扑排序的算法,该算法首先用邻接表构造有向图的存储结构,然后对此有向图进行拓扑排序,输出拓扑排序的结果。用VC+作为软件开发环境,以邻接表作为图的存储结构,将图中所有顶点排成一个线性序列,输出拓扑排序结果。拓扑排序常用来确定一个依赖关系集中,事物发生的顺序。拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。关键词:邻接表;有向无环图;拓扑排序目 录1 课题描述12 问题分析和任务定义23 逻辑设计33.1程序模块功能图33.2 抽象数据类型34 详细设计44.1 C语言定义的相关数据类型44.2 主要模块的伪码
4、算法44.2.1主函数伪码算法44.2.2邻接表伪码算法44.2.3拓扑排序的伪码算法:54.3 主函数流程图65 程序编码76 程序调试与测试137 结果分析168 总结17参考文献181 课题描述根根据设计要求运用C语言程序设计了一个对有向图进行拓扑排序的算法,该算法首先用邻接表构造有向图的存储结构,然后对此有向图进行拓扑排序,输出拓扑排序的结果。如给定一个有向无环图如图1.1所示。在此图中,从入度为0的顶点出发,删除此顶点和所有以它为尾的弧;重复直至全部顶点均已输出;或者当图中不存在无前驱的顶点为止。 23 1 4 5图1.1 有向无环图开发工具:Visual C+ 6.02 问题分析和
5、任务定义对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对由某个集合上的一个偏序得到该集合上的一个全序,这个操作就称之为拓扑排序。偏序集合中仅有部分成员之间颗比较,而全序指集合中全体成员之间均可比较,而由偏序定义得到拓扑有序的操作便是拓扑排序。一个表示偏序的有向图可用来表示一个流程图,通过抽象出来就是AOV-网,若从顶点i到顶点j有一条有向路径,则i是j的前驱,j是i的后继。若(i,j)是一条弧,则i是j的直接前驱;j是i的直接后继。在AOV-网中,不应该出现有向环,用拓扑排序就可以判断网中是否有环,若网中所有顶点都在它的拓扑有序序列中,则该AOV-网必定不存在
6、环。3 逻辑设计主函数3.1程序模块功能图拓扑排序节点入度栈的初始化创建邻接表有向图初始化图3.1程序模块功能图3.2 抽象数据类型ADT ALGraph数据对象:D=V|V是具有相同特性的数据元素的集合,即顶点集数据关系:R=|v,wV,表示顶点v到顶点w的弧基本操作P:CreatGraphlist(ALGraph *G)初始条件:成对输入顶点集V中的点。操作结果:构造图G的邻接表。FindInDegree(ALGraph G, int indegree)初始条件:图G的邻接表中存在结点V。操作结果:找到图中入度为0结点。Initgraph()操作结果:完成图形初始化。Topological
7、Sort(ALGraph G)初始条件:构造的有向图G已初始化。操作结果:对于有向图G根据邻接存储表进行拓扑排序。4 详细设计4.1 C语言定义的相关数据类型#define max_vextex_num 20 /*宏定义最大顶点个数*/ #define stack_init_size 100 /*宏定义栈的存储空间大小*/ typedef int ElemType; typedef struct VNode /*邻接表头结点的类型*/int data; /*顶点信息,数据域*/VNode, AdjListMAX_VEXTEX_NUM; /*AdjList是邻接表类型*/typedef stru
8、ct AdjList vertices; /*邻接表*/ int vexnum, arcnum; /*图中顶点数vexn和边数arcn*/ALGraph; /*图的类型*/typedef struct /构建栈 ElemType *base; /*数据域*/ ElemType *top; /*栈指针域*/int stacksize; SqStack;4.2 主要模块的伪码算法4.2.1主函数伪码算法:开始 创建及输出邻接表CreatGraphlist(&G);输出排序后的输出序列TopologicalSort(G);结束4.2.2邻接表伪码算法:#define MAX_VEXTEX_NUM 2
9、0typedef struct VNode /*邻接表头结点的类型*/ int data; /*顶点信息,数据域*/ ArcNode *firstarc; /*指向第一条弧*/VNode, AdjListMAX_VEXTEX_NUM; /*AdjList是邻接表类型*/typedef struct AdjList vertices; /*邻接表*/ int vexnum, arcnum; /*图中顶点数vexn和边数arcn*/ALGraph; /*图的类型*/开始定义一个指针P置i的初值为1邻接表中所有头结点指针置初值当i=G-vexnum时自加,执行下面操作:输出数据域里的顶点信息使指针p
10、指向顶点i第一条弧的头结点输出访问顶点使指针p指向顶点i的下一条弧的头结点类此循环到输出最后一个顶点结束4.2.3拓扑排序的伪码算法开始引入栈操作函数和入度操作函数访问邻接存储表中的顶点nIf该顶点入度为0顶点进栈循环操作到所有顶点入栈当栈不为空顶点出栈结束4.3 主函数流程图主函数流程图如图4.3所示开始输入顶点数和弧数N输入判断是否满足条件 Y根据输入信息建立邻接表 建栈在邻接表中寻找入度为零的顶点,使其入栈N输出栈顶元素,打印,将与栈顶元素邻接的顶点的入度减1判断是否空栈 Y 结束图4.3 主函数程序流程图5 程序编码#include#include#define true 1#defi
11、ne false 0#define MAX_VEXTEX_NUM 20#define M 20#define STACK_INIT_SIZE 100#define STACKINCREMENT 10/*-图的邻接表存储结构-*/typedef struct ArcNode /*弧结点结构类型*/ int adjvex; /*该弧指向的顶点的位置*/ struct ArcNode *nextarc; /*指向下一条弧的指针*/ArcNode;typedef struct VNode /*邻接表头结点类型*/ int data; /*顶点信息*/ ArcNode *firstarc; /*指向第一
12、条依附于该点的弧的指针*/ VNode,AdjListMAX_VEXTEX_NUM; /*AdjList为邻接表类型*/typedef struct AdjList vertices; int vexnum, arcnum;ALGraph;/*-*/void CreatGraph(ALGraph *G) /*通过用户交互产生一个图的邻接表*/ int m, n, i; ArcNode *p; printf(=); printf(n输入顶点数:); scanf(%d,&G-vexnum); printf(n输入边数:); scanf(%d,&G-arcnum); printf(=); for (
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 拓扑 排序 算法 实现 22
限制150内