收藏 分享(赏)

数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf

上传人:精品资料 文档编号:8438832 上传时间:2019-06-27 格式:PDF 页数:27 大小:580.04KB
下载 相关 举报
数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf_第1页
第1页 / 共27页
数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf_第2页
第2页 / 共27页
数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf_第3页
第3页 / 共27页
数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf_第4页
第4页 / 共27页
数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告.pdf_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、数 据 结 构 课 程 设 计本课程设计已调试通过,请放心使用。请到:道客巴巴或豆丁网充值购买word版,省打字,直接修改即可,价格较便宜,在这里百度较贵!搜索:数据结构_图的邻接矩阵建立及其遍历_课程设计_实验报告设计题目: 图的邻接矩阵的建立及其遍历课题名称 图的邻接矩阵建立及其遍历院 系 年级专业学 号 姓 名 成绩课题设计目的与设计意义 1、课题设计目的:(1)巩固和加深课堂教学内容,提高学生的实际动手操作能力。(2)建立图的存储结构建立图的存储结构,图的类型包括:无向图和有向图无向网和有向网,能够输入图的顶点和边的信息放入相应的存储结构,而后输出邻接矩阵,最后再以一个顶点为出发点对得

2、到的图的邻接矩阵进行深度优先遍历和广度优先遍历。2、课题设计意义:图是一种较复杂的数据结构,图的搜索在图书索引,城市道路建设,人工智能等领域中发挥着重要作用。图的搜索有深度优先搜索和广度优先搜索,我们可以通过图的邻接矩阵实现图的这种搜索。我们学习两年的有关C语言和数据结构的相关知识,而课程设计是将我们把所学的理论和生产实践相结合的重要环节,通过这次课程设计,可以使我们所学的专业技能得到巩固、扩大、深入和系统化;培养综合运用所学知识解决图的搜索的能力,初步掌握数据结构程序设计的方法和步骤。 指导教师:年 月 日目 录第一章 需求分析.11.1课题设计的目的及意义1第二章 概要设计.22.1程序设

3、计的基本分析图如下22.2 图的邻接矩阵及遍历实现的概述22.2.1基本函数的应用2第三章 详细设计.43.1 数据类型的定义43.1.1 无向图和有向图的定义.43.1.2 链队列的定义.43.2 主函数程序43.2.1主函数的主菜单的功能.43.2.5 有向网的操作.8第四章 测试分析.84.1 主功能菜单84.2 各子函数功能操作9第五章 心得体会.13第六章 源程序代码.14第七章 参考文献.241第一章 需求分析1.1课题设计的目的及意义1课题设计目的:巩固和加深课堂教学内容,提高学生的实际动手操作能力,使学生熟练掌握数据结构中所学的理论知识,通过综合应用数据结构的基本知识来解决实际

4、问题,加强学生分析和解决问题的能力。建立图的存储结构,图的类型包括:无向图和有向图无向网和有向网,能够输入图的顶点和边的信息放入相应的存储结构,而后输出邻接矩阵,最后再以一个顶点为出发点对得到的图的邻接矩阵进行深度优先遍历和广度优先遍历2课题设计意义:图是一种较复杂的数据结构,图的搜索在图书索引,城市道路建设,人工智能等领域中发挥着重要作用。图的搜索有深度优先搜索和广度优先搜索,我们可以通过图的邻接矩阵或邻接表实现图的这两种搜索。本次程序设计我们通过C语言编写程序实现图的搜索。在编写过程中我们将图定义为邻接矩阵类型,通过深度优先搜索遍历和广度优先搜索遍历分别实现图的搜索。我们学习两年的有关C语

5、言和数据结构的相关知识,而课程设计是将我们把所学的理论和生产实践相结合的重要环节, 通过这次课程设计,可以使我们所学的专业技能得到巩固、扩大、深入和系统化;培养综合运用所学知识解决图的搜索的能力,初步掌握数据结构程序设计的方法和步骤;使我们进一步提高编写程序的效率;提高我们独立钻研问题的能力,培养严肃认真,实事求是,刻苦钻研的工作作风。1.2课程的要求分析1以邻接矩阵为存储结构,存储各个顶点信息边的信息以及顶点与边的关系;2实现无向图和有向图无向网和有向网的邻接矩阵的建立及其深度优先遍历和广度优先遍历;3要求利用队列实现无向图和有向图无向网和有向网的邻接矩阵的深度优先遍历和广度优先遍历;4以用

6、户指定的结点为起点,分别输出两种遍历下的结点访问序列5运用C语言在MicrosoftVisualC+6.0中编写源代码,得到正确的程序;2第二章 概要设计2.1程序设计的基本分析图如下2.2 图的邻接矩阵及遍历实现的概述2.2.1基本函数的应用:图的操作无向图的操作 有向图的操作 无向网的操作 有向网的操作邻接矩阵的建立图的深度优先遍历和广度优先遍历31结构体的定义:运用结构体的typedefstruct类型定义无向图和有向图无向网和有向网的顶点vertex和边adjvex的信息,结构体定义队列和指针link和next域,用于广度优先遍历。2、基本函数:3、子程序功能菜单:(1)voidcre

7、atyouxianggraph(graph*ga,intn,inte) /*有向图邻接矩阵的建立*/(2)voidcreatwuxianggraph(graph*ga,intn,inte) /*无向图邻接矩阵的建立*/(3)voidcreatyouxiangwang(graph*ga,intn,inte) /*有向网邻接矩阵的建立*/(4)voidcreatwuxiangwang(graph*ga,intn,inte) /*无向网邻接矩阵的建立*/(5)setnull(linkqueue*q) /*置空队*/(6)intempty(linkqueue*q) /*判断队空*/(7)enqueue

8、(linkqueue*q,intx) /*入队*/(8)DFS(graph*ga,inti,intn) /*深度遍历*/(9)BFS(graph*ga,intk,intn) /*广度遍历*/图 函数名的类型 图的邻接矩阵建立 深度遍历 广度遍历 结果输出无向图 Creatwuxianggraph( ) DFS() BFS() print()有向图 Creatyouxianggraph( ) DFS() BFS() print()无向网 Creatwuxiangwang( ) DFS() BFS() print()有向网 Creatyouxiangwang( ) DFS() BFS() prin

9、t()4(10)voidprint(graph*ga,intn,inte) /*邻接矩阵的输出*/第三章 详细设计3.1 数据类型的定义:3.1.1 无向图和有向图的定义#definemaxsize64 /*邻接矩阵数组存储的最大空间*/typedefstruct charvexsmaxsize; /*定义存储顶点信息的一维数组*/intarcsmaxsizemaxsize;/*定义存储边与顶点关系的二维数组*/graph;3.1.2 链队列的定义typedefstructpnode datatypedata; /*定义链表的数据域*、structpnode*next; /*定义链表的指针域*

10、/linklist;typedefstructlinklist*front,*rear; /*用linklist类型定义队头和队尾*/linkqueue;linkqueue*q; /*q是链队列指针*/3.2 主函数程序3.2.1主函数的主菜单的功能,调用子函数的程序:voidmain() inti=1;while(i)printf(“n“);5printf(“ttt 功能菜单 n“);printf(“n“);printf(“ttt*n“);printf(“ttt* 0.无向图的操作 *n“);printf(“ttt* *n“);printf(“ttt* 1.有向图的操作 *n“);print

11、f(“ttt* *n“);printf(“ttt* 2.无向网的操作 *n“);printf(“ttt* *n“);printf(“ttt* 3.有向网的操作 *n“);printf(“ttt* *n“);printf(“ttt*n“);printf(“nttt请输入选择的功能编号(0-3):n“);scanf(“%d“,3.2.2无向图操作while(k) printf(“n0:无向图邻接矩阵的建立n1:无向图的深度遍历n2:无向图的广度遍历:n3无向图邻接矩阵的输出:n“);scanf(“%d“,switch(k)case0:printf(“请输入无向图的顶点数和边数:“);scanf(“

12、%d%d“,creatwuxianggraph(break;case1:printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“深度遍历后的结果为:“);DFS(break;case2:printf(“请输入遍历顶点下标和顶点数:“);6scanf(“%d%d“,BFS(break;case3:printf(“输出的图为:n“);print(break;printf(“n0:结束n1:继续n“);scanf(“%d“,3.2.3 有向图的操作while(j) printf(“0:有向图邻接矩阵的建立n1:有向图的深度遍历n2:有向图的广度遍历:n3有向图邻接

13、矩阵的输出:“);scanf(“%d“,switch(j) case0:printf(“请输入有向图的顶点数和边数:“);scanf(“%d%d“,creatyouxianggraph(break;case1:printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,DFS(break;case2: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,BFS(break;case3: printf(“输出的图为:n“);7print(break;printf(“n0:结束n1:继续n“);scanf(“%d“,3.2.4 无向网的操作while(m)

14、printf(“0:无向网邻接矩阵的建立n1:无向网的深度遍历n2:无向网的广度遍历:n3无向网邻接矩阵的输出:“);scanf(“%d“,switch(m) case0: printf(“请输入无向网的顶点数和边数:“);scanf(“%d%d“,creatwuxiangwang(break;case1: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,DFS(break;case2:printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,BFS(break;case3: printf(“输出的网为:n“);print(break;printf

15、(“n0:结束n1:继续n“);scanf(“%d“,83.2.5 有向网的操作while(t) printf(“0:无向网邻接矩阵的建立n1:无向网的深度遍历n2:无向网的广度遍历:n3无向网邻接矩阵的输出:“);scanf(“%d“,switch(t) case0: printf(“请输入无向网的顶点数和边数:“);scanf(“%d%d“,creatyouxiangwang(break;case1: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,DFS(break;case2: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,BF

16、S(break;case3: printf(“输出的网为:n“);print(break;printf(“n0:结束n1:继续n“);scanf(“%d“, 第四章 测试分析4.1 主功能菜单功能主页面图的操作如下图19图1 图的操作4.2 各子函数功能操作4.2.1 无向图的操作1、无向图的建立与输出无向图的建立与输出首先用户输入0选择无向图的建立,然后根据提示语输入顶点和边的信息建立邻接矩阵,测试结果如图2。图2无向图的建立建立好无向图后,用户再输入3选择邻接矩阵的输出,得到结果如图310图3无向图邻接矩阵输出2、无向图的深度优先遍历和广度优先遍历图4 无向图的深度优先遍历图5 无向图的广

17、度优先遍历4.2.2有向图的操作1、有向图的建立与输出有向图的建立与输出首先用户输入0选择有向图的建立,然后根据提示语输入顶点和边的信息建立邻接矩阵,测试结果如图611图6 有向图的邻接矩阵建立建立好有向图后,用户再输入3选择邻接矩阵的输出,得到结果如图7图7 有向图的邻接矩阵输出图8有向图深度遍历 图9有向图广度遍历4.2.3 无向网的操作1、无向网的建立与输出无向网的建立与输出首先用户输入0选择无向网的建立,然后根据提示语输入顶点和边的信息建立邻接矩阵,测试结果如图1012图10无向网邻接矩阵的建立建立好无向网后,用户再输入3选择邻接矩阵的输出,得到结果如图11图11 无向网的邻接矩阵输出

18、2、无向网的深度优先遍历和广度优先遍历图12 深度优先遍历 图13广度优先遍历4.2.4 有向网的操作1、有向网的建立与输出有向网的建立与输出首先用户输入0选择有向网的建立,然后根据提示语输入顶点和边的信息建立邻接矩阵,测试结果如图1413图14 有向网的邻接矩阵建立建立好无向网后,用户再输入3选择邻接矩阵的输出,得到结果如图15图15 有向网邻接矩阵的输出2、有线网的深度优先遍历和广度优先遍历图16有向网的深度遍历 图17有向网的广度遍历第五章 心得体会1、实际完成的情况说明主要程序参考教材数据结构用C语言描述2、程序的性能分析14可连续建图3、上机过程中出现的问题及其解决方案。编译没有错误

19、,但结果有问题。解决方案:虽然程序的编译通过,只能说明语法上没有问题,结果只所以不正确是因为算法上原因。4、程序中可以改进的地方说明程序中的深度优先遍历,浪费空间较大,可以考虑用循环来做。但这样将付出代码长度加长的代价。5、程序中可以扩充的功能及设计实现假想实现假想:随用户的输入可以随时动态的显示图的生成。6、收获及体会通过这次课程设计实践,加深了我对图的邻接矩阵的建立及其遍历的认识和了解,对图的一些概念更加清晰了,提高了我的实际动手操作能力,在上机操作的时候不断编译改错,尽量的完善程序,也增强了我使用word书写报告和画图的能力,不断的修改,我更好的掌握了图的无向图和有向图、无向网和有向网的

20、邻接矩阵建立及其深度优先遍历和广度优先遍历的操作。编写程序即是一件艰苦的工作,又是一件愉快的事情。最大的收获:编程时如果遇到看似简单但又无法解决的问题,很容易灰心丧气。此时切不可烦躁,一定要冷静的思考,认真的分析。查询一些资料为自己的报告做准备,询问老师不懂的问题,要勇敢的面对问题,勇敢的接受问题,勇敢的处理问题,最后最勇敢的解决问题,更好的总结自己的成果,态度认真。第六章 源程序代码图的基本操作源代码:#include#includetypedefcharvextype;typedefintdatatype;#definemaxsize64typedefstruct charvexsmaxs

21、ize;intarcsmaxsizemaxsize;graph;typedefstructnode15intadjvex;structnode*next;edgenode;typedefstruct vextypevertex;edgenode*link;vexnode;typedefstructpnode datatypedata;structpnode*next;linklist;typedefstruct linklist*front,*rear;linkqueue;linkqueue*q;voidcreatyouxianggraph(graph*ga,intn,inte)/*有向图邻接

22、矩阵的建立*/ inti,j,k;getchar();printf(“请输入顶点字符:“);for(i=0;ivexsi);for(i=0;iarcsij=0;for(k=0;karcsij=1;16voidcreatwuxianggraph(graph*ga,intn,inte)/*无向图邻接矩阵的建立*/ inti,j,k;getchar();printf(“请输入顶点字符:“);for(i=0;ivexsi);for(i=0;iarcsij=0;for(k=0;karcsij=1;ga-arcsji=1;voidcreatyouxiangwang(graph*ga,intn,inte)/

23、*有向网邻接矩阵的建立*/ inti,j,k,w;getchar();printf(“请输入顶点字符:“);for(i=0;ivexsi);for(i=0;iarcsij=0;for(k=0;karcsij=w;17voidcreatwuxiangwang(graph*ga,intn,inte)/*无向网邻接矩阵的建立*/ inti,j,k,w;getchar();printf(“请输入顶点字符:“);for(i=0;ivexsi);for(i=0;iarcsij=0;for(k=0;karcsij=w;ga-arcsji=w;voidprint(graph*ga,intn,inte)/*邻接

24、矩阵的输出*/ inti,j;for(i=0;ivexsi);for(j=0;jarcsij);printf(“n“);setnull(linkqueue*q) q-front=(linklist*)malloc(sizeof(linklist);q-front-next=NULL;q-rear=q-front;18intempty(linkqueue*q) if(q-front=q-rear)return1;elsereturn0;enqueue(linkqueue*q,intx) q-rear-next=(linklist*)malloc(sizeof(linklist);q-rear=q

25、-rear-next;q-rear-data=x;q-rear-next=NULL;datatypedequeue(linkqueue*q) linkqueue*s;if(empty(q) printf(“队为空!“);returnNULL; else s=q-front;q-front=q-front-next;free(s);return(q-front-data);intvisitedmaxsize=0;DFS(graph*ga,inti,intn)/*遍历起始点*/ intj;printf(“%c“,ga-vexsi);19visitedi=1;for(j=0;jarcsij!=0)i

26、ntvisitmaxsize=0;BFS(graph*ga,intk,intn) inti,j;linklistQ;setnull(printf(“%c“,ga-vexsk);visitk=1;enqueue(while(!empty(for(j=0;jarcsij!=0)visitj=1;enqueue(voidmain() inti=1,j=1,k=1,m=1,t=1;intn,e;graphga;while(i) printf(“n“);printf(“ttt 功能菜单 n“);printf(“n“);20printf(“ttt*n“);printf(“ttt* 0.无向图的操作 *n“

27、);printf(“ttt* *n“);printf(“ttt* 1.有向图的操作 *n“);printf(“ttt* *n“);printf(“ttt* 2.无向网的操作 *n“);printf(“ttt* *n“);printf(“ttt* 3.有向网的操作 *n“);printf(“ttt* *n“);printf(“ttt*n“);printf(“nttt请输入选择的功能编号(0-3):n“);scanf(“%d“,switch(i) case0: while(k)printf(“n0:无向图邻接矩阵的建立n1:无向图的深度遍历n2:无向图的广度遍历:n3无向图邻接矩阵的输出:n“);

28、scanf(“%d“,switch(k) case0:printf(“请输入无向图的顶点数和边数:“);scanf(“%d%d“,creatwuxianggraph(break;case1:printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“深度遍历后的结果为:“);DFS(break;case2:printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“广度遍历的结果为:“);21BFS(break;case3:printf(“输出的图为:n“);print(break; printf(“n0:结束n1:继续n“);s

29、canf(“%d“,break;case1: while(j) printf(“0:有向图邻接矩阵的建立n1:有向图的深度遍历n2:有向图的广度遍历:n3有向图邻接矩阵的输出:“);scanf(“%d“,switch(j) case0: printf(“请输入有向图的顶点数和边数:“);scanf(“%d%d“,creatyouxianggraph(break;case1: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“深度遍历后的结果为:“);DFS(break;case2: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%

30、d“,printf(“广度遍历后的结果为:“);BFS(break;22case3: printf(“输出的图为:n“);print(break printf(“n0:结束n1:继续n“);scanf(“%d“,break;case2: while(m) printf(“0:无向网邻接矩阵的建立n1:无向网的深度遍历n2:无向网的广度遍历:n3无向网邻接矩阵的输出:“);scanf(“%d“,switch(m) case0: printf(“请输入无向网的顶点数和边数:“);scanf(“%d%d“,creatwuxiangwang(break;case1: printf(“请输入遍历顶点下标

31、和顶点数:“);scanf(“%d%d“,printf(“深度遍历后的结果为:“);DFS(break;case2: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“广度遍历后的结果为:“);BFS(break;case3: printf(“输出的网为:n“);print(break;23 printf(“n0:结束n1:继续n“);scanf(“%d“, break;case3: while(t) printf(“0:有向网邻接矩阵的建立n1:有向网的深度遍历n2:有向网的广度遍历:n3有向网邻接矩阵的输出:“);scanf(“%d“,switch

32、(t)case0: printf(“请输入无向网的顶点数和边数:“);scanf(“%d%d“,creatyouxiangwang(break;case1: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“深度遍历后的结果为:“);DFS(break;case2: printf(“请输入遍历顶点下标和顶点数:“);scanf(“%d%d“,printf(“广度遍历后的结果为:“);BFS(break;case3: printf(“输出的网为:n“);print(break; printf(“n0:结束n1:继续n“);scanf(“%d“, break;24printf(“0:结束图的操作n1:继续图的操作n“);scanf(“%d“, 第七章 参考文献1唐策善等,数据结构中国科学技术大学出版社19922许卓群等,数据结构高等教育出版社19873严蔚敏,吴伟民,数据结构第二版清华大学出版社19924徐德民,最新C语言程序设计电子工业出版社1992

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报