ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:333.20KB ,
资源ID:27174953      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27174953.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(图的遍历实现课程设计数据结构程序图.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

图的遍历实现课程设计数据结构程序图.docx

1、图的遍历实现课程设计数据结构程序图数据结构课程设计设计说明书 图的遍历的实现 学生姓名 英 茜 学 号 11806433 班 级 网络1101班 成 绩 指导教师 申 静 数学与计算机科学学院214年1 月 4日课程设计任务书201314学年第一学期课程设计名称: 数据结构课程设计 课程设计题目: 图的遍历实现 完 成 期 限:自2013年 1 月23日至 2014年 月 4日共 2 周设计内容:1. 任务说明(1)采用邻接表存储结构创建一个图;()编程实现图的深度优先搜索(或广度优先搜索)遍历算法;(3) 输出遍历结果;(4) 给定具体数据调试程序。要求)问题分析和任务定义:根据设计题目的要

2、求,充分地分析和理解问题,明确问题要求做什么? 2)逻辑设计:写出抽象数据类型的定义,各个主要模块的算法,并画出模块之间的调用关系图;3)详细设计:定义相应的存储结构并写出各函数的伪码算法。4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。5)程序调试与测试:采用自底向上,分模块进行,即先调试低层函数。6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算法的时间、空间复杂性分析;7)编写课程设计报告。3. 参考资料指导教师:申静 教研室负责人:余冬梅课程设计评阅评语:指导教师签名: 年 月 日 摘 要 针对图问题中如何更好地实现图的遍历问题,以无向图为

3、例,分别采用广度优先遍历和深度优先遍历的算法实现对各节点的遍历,以+为开发环境进行系统的设计和实现,其运行结果表明,系统能很好地完成遍历后节点的输出,实现了遍历的目的,系统界面友好,可操作性强。关键词:数据结构;存储结构;邻接矩阵目 录一课题描述二设计目的与任务2.1课程设计的目的 2.2课程设计的任务 231总体设计3.2基本操作 .3详细设计4四 运行调试结果6五 结论与致谢 六附录11一课题描述数据结构是一门专业基础课,它对学习者的要求很明确:学会分析、研究计算机加工的数据结构的特性,以便为应用设计所需的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的

4、技术。其次,该课程的学习过程也是复杂程序设计的训练过程,要求学习者编写的程序结构或设计的程序结构体清楚、正确、易读,符合软件工程的规范。图是一种较为复杂且重要的数据结构,其特殊性在于图形结构中结点之间的关系可以是任意的,图中任意两个数据元素之间都有可能相关。就本课程设计而言应用图论的知识讨论如何在计算机上实现图的遍历的操作,主要解决图的遍历的几种方法的实现。本设计采用目前最通用的程序设计语言之一C语言作为数据结构和算法的描述语言。二 设计目的与任务2.课程设计的目的进一步的了解图的遍历的问题,图的FS,BF的递归和非递归算法的实现, 用无向图来实现图的遍历。初步掌握软件开发过程的问题分析、系统

5、设计、程序编码、测试等基本方法和技能。训练学生灵活应用所学数据结构的基本知识,熟练的完成问题分析、算法设计、编写程序,求解出指定的问题。训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养严谨的科学态度和良好的工作作风。提高综合运用所学的理论知识和方法独立分析和解决问题的能力。2.课程设计的任务1)任务说明用/+编写一个程序实现图的遍历的算法。从键盘上输入一个图的基本信息(图用邻矩阵表示)。图的DFS,BS的递归和非递归算法的实现;用有向图实现图的遍历;用无向图实现图的遍历;用邻接矩阵存储图;用邻接表存储图。2)要求首先输入图的结点数; 2依

6、次输入图的各条边(数据之间用空格隔开);3输出的形式:按用户选择的遍历方法给出遍历顺序,各字符间用-分隔; 4程序所能达到的功能:能够按要求输出所要的结果。三 设计方案和实施.1总体设计采用邻接矩阵作为图的存储结构。程序中主要用到以下抽象数据类型:抽象数据类型的定义typedf strut carexs; /顶点向量 in acsAX_VEXMAX_VEX; /邻接矩阵 it vexnu,arcum; /图的当前顶点数和弧数 Graph;3.2基本操作CreUD(Grap G)操作结果:用邻接矩阵创建带权无向网图。DF(Gah G,it)操作结果:对已存在的图进行深度优先遍历。BFS(r G)

7、操作结果:对已存在的图进行广度优先遍历。hoe(ah G)操作结果:对将要实现的操作步骤进行选择。程序包含两个模块主程序模块,其中主函数为t ma输入信息;根据输入要求进行选择操作和输出;输出结果;选择操作模块实现具体选择的对应操作及输出操作。两模块之间关系如下图3.1所示图31模块关系图3.3详细设计程序流程图如图3.2所示 图3.2程序流程图函数设计程序设计中主要包括下列函数用邻接矩阵创建一个图:void CreaeUD(Gra &G)用邻接矩阵创建一个带权无向网图;输入顶点数和弧数;输入各个顶点及各条弧;递归方法实现图的遍历:oid DFS(Graph G, int k)用递归的方法访问

8、图中的结点;对图进行深度优先遍历;非递归方法实现图的遍历:voi S(Graph G) 用队列辅助访问图中的结点;对图进行广度优先遍历;选择输出需要的遍历方法:vidchoos(Graph )给出程序运行的选项;对相应的输入选项调用相应的函数以执行操作;四 运行调试结果例:遍历如下无向图(图 .)(,b,c,d,分别表示V1V2V VV5五个顶点)以图1为例步骤一:运行程序,按提示首先输入顶点数和弧数。图.2输入顶点数和弧数步骤二:输入顶点和弧(1)输入顶点图4.3 输入各顶点 (2)输入弧图4. 输入各条弧步骤三:选择便利方式以及选择后结果 选择1操作显示广度优先编历结果图44广度优先结果

9、选操作显示深度优先遍历图4.4深度优先遍历结果 五 结论与致谢在程序设计中我主要是解决的是给出一个图如何用多种方法完成图的遍历的问题,也包括如何创建一个图,深度优先遍历和广度优先遍历一个图,递归和非递归的方法实现图的遍历。程序最终通过调试运行,初步实现了设计目标。图是一种较为复杂且重要的数据结构,其特殊性在于图形结构中结点之间的关系可以是任意的,图中任意两个数据元素之间都有可能相关。用邻接矩阵作为图的数据存储结构很好地解决了图的结构难点, 借助于邻接矩阵容易判定任意两个顶点之间是否有边(或弧)相连,并容易求得各个顶点的度。该程序通俗易懂且实用性强,并且该程序清单详细具体、全面、具有很强的可读性

10、;系统整体上比较完美,可以从键盘获取输入元素,并且可以根据用户输入进行选择性地输出;整体输出画面效果整洁、大方。这次课程设计也让我充分认识到数据结构这门课的重要性。它给我们一个思想和大纲,让我们在编程时容易找到思路,不至于无章可循。同时它也有广泛的实际应用。 最后,我还要特别感谢我们的辅导老师申静老师,在她的精心辅导和帮助下,我的设计才得以顺利完成。对她为我们的设计所提出的宝贵意见表示忠心的感谢!参考文献谭浩强. 程序设计第三版. 北京:清华大学出版社.2罗宇等. 数据结构M . 北京邮电大学出版社.严藯敏. 数据结构C语言版.北京:清华大学出版社.杨路明. 语言程序设计教程. 北京邮电大学出

11、版社5徐孝凯 数据结构课程实验. 清华大学出版社.六附录源程序代码/ 程序功能:采用递归和非递归算法,有向图和无向图,邻接矩阵和邻接表等多种结构存储实现图的遍历。/程序作者:英茜/ 最后修改日期:204-1-3cudestdo.h#inuestib.h#dfine IFII 3276 #defineMAX_VE 2 /最大顶点个数#defneQUEUZ (AX_E+1) /队列长度oo*ised; /访问标志数组 int z1; /图的邻接矩阵存储结构 ypeef stuct chr *vexs; /顶点向量 nt arsMAX_EXMAX_VEX; /邻接矩阵 it vexnum,acnm;

12、 /图的当前顶点数和弧数 Gaph;casuue /队列类 ublic: voidntQu() ase=(i *)ac(QUEUZE*sizeof(int);font=ar=0; vid Ene(int ) baer=e; rea=(rear)%UEUSIZE; oid Duee(ine) e=sefront; fro=(font1)%QEUESE; int bae;in frnt;int rea;;intLcte(Grph G,harc) /图中查找元素c的位置or(in i=0;G.vexnm;+) if(Gves=c) etr i;rtur -; voCreateDN(aph &) /创

13、建无向网nt i,j,w,s;cha a,c,emp;prnf(输入顶点数和弧数(顶点数和弧数之间以空格隔开) : );c(d%,Gvxum,&.num); temp=gechar(); /接收回车 G.vexs=(ar )maloc(G.vxnumsizeof(cha); 分配顶点数目printf(输入%d个顶点.n,.vexnum); for(=0;G.vexum;+) /初始化顶点sca(%c,&.vesi); temp=getchar(); 接收回车 o(=0;iG.vnum;+) /初始化邻接矩阵 fr(j=0;j.vxn;j+) arcsij=NINITY; printf(输入%条

14、弧,.cn); o(i=;iG.rcm;+) /初始化弧rint(输入弧%d: ,);can(%c %c %d%c,&a,&,&,&); /输入一条边依附的顶点和权值 s1=Loate(G,a); s2=ote(,b); G.arcs12.rcss=w; intFrtVex(raph G,n k) /图G中顶点k的第一个邻接顶点if(k=0& G.venum) /合理or(i;i=0 & i=0& G.vm) /,j合理fo(in k=j1;kG.vexnm;+) if(.arck!=INFINTY) etuk; reun -;/深度优先遍历 voi DS(Gap G,it k) nt i;

15、if(=-1) /第一次执行DFS时,为-1 fo(i=0;i %c,Gvesk);+z; /访问第个顶点 if((-)G.vexum=0) 1;o(i=FitVx(G,k);i=;i=NtVex(G,k,i) if(!visitd) DFS(,i); /对的尚未访问的邻接顶点i递归调用DFS /广度优先遍历 id BS(Grph G)i; Quee; /辅助队列Q QIniQueue(); fr(it i=0;i0;w=Ntex(G,k,w) if(!vsitdw) /为的尚未访问的邻接顶点 visitdw=ru;pintf(- %c,Gex);Q.EQueu(w); printf(n 请继

16、续选择:n); o choe(Grh) /对输入选项调用相应的函数执行操作int,; visted=(bol *)aloc(G.vexumsizeof(l);scanf(%d,m);sitch()case: prntf(广度优先遍历: );for(i=0;iG.exnu;i) visitedifse; BFS(G); chooe(G); rintf(n);break;case 2:prntf(深度优先遍历:);or(i=0;G.vexnm;i+) sitedi=false; (,-1); prif(n 请继续选择:n);coe(G);brak;ae 3:pit(程序结束.); reak;efult : rintf( 输入错误!n请在1-3中选择:n); choose(G);/主函数 vodmai() nt i,m; Graph G; eUDN(); prnt(有如下选项供选择:n);printf(n);printf(|:广度优先遍历 :深度优先遍历 3:退出本程序!|);print(n);rintf(请选择(3):n);choose(G);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1