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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《数据结构》课程设计.docx

1、数据结构课程设计 长江大学算法与数据结构课程设计班 级:13级*姓 名:*指导老师:*2015年6月22日2015年7月3日一、 设计方案和实现过程-P1二、 测试-P7三、 使用说明-P11四、 难点与收获-P13五、 实现代码-P14六、指导老师意见-P36一、设计方案和实现过程第一步:设计一个基于VC或VS的应用程序。要利用多级菜单实现各种功能。内容如下:1 无向图的基本操作及应用1 创建无向图的邻接矩阵2 创建无向图的邻接表3 无向图的深度优先遍历4 无向图的广度优先遍历2 无向网的基本操作及应用1 创建无向网的邻接矩阵2 创建无向网的邻接表3 求最小生成树3 有向图的基本操作及应用1

2、 创建有向图的邻接矩阵2 创建有向图的邻接表3 拓扑排序4 有向网的基本操作及应用1 创建有向网的邻接矩阵2 创建有向网的邻接表3 关键路径4 单源最短路径第二步:设计菜单 void ShowMainMenu() coutn; cout *图的基本操作及应用*n; cout * 1 无向图的基本操作及应用 *n; cout * 2 无向网的基本操作及应用 *n; cout * 3 有向图的基本操作及应用 *n; cout * 4 有向网的基本操作及应用 *n; cout * 5 退出 *n; cout *n;void UDG() MGraph MG; ALGraph ALG; int n; d

3、o coutn; cout *无向图的基本操作及应用*n; cout * 1 创建无向图的邻接矩阵 *n; cout * 2 创建无向图的邻接表 *n; cout * 3 无向图的深度优先遍历 *n; cout * 4 无向图的广度优先遍历 *n; cout * 5 退出 *n; coutn; switch(n) case 1:CreatUDG_M(MG);break; case 2:CreatUDG_ALG(ALG); dispgraph(ALG);break; case 3:break; case 4:break; default: if (n!=5) cout错误,重新输入n; whil

4、e(n!=5);void UDN() MGraph MN; ALGraph ALN; int n; do coutn; cout *无向网的基本操作及应用*n; cout * 1 创建无向网的邻接矩阵 *n; cout * 2 创建无向网的邻接表 *n; cout * 3 prim算法求最小生成树 *n; cout * 4 kraskal算法求最小生成树 *n; cout * 5 退出 *n; coutn; switch(n) case 1:CreatUDN_M(MN);break; case 2:CreatUDN_ALG(ALN); dispgraph_N(ALN);break; case

5、3:break; case 4:break; default: if (n!=5) cout错误,重新输入n; while(n!=5); void DG() int n; do coutn; cout *有向图的基本操作及应用*n; cout * 1 创建有向图的邻接矩阵 *n; cout * 2 创建有向图的邻接表 *n; cout * 3 拓扑排序 *n; cout * 4 退出 *n; coutn; switch(n) case 1:break; case 2:break; case 3:break; default: if (n!=4) cout错误,重新输入n; while(n!=4

6、);void DN() int n; do coutn; cout *有向网的基本操作及应用*n; cout * 1 创建有向网的邻接矩阵 *n; cout * 2 创建有向网的邻接表 *n; cout * 3 关键路径 *n; cout * 4 单源顶点最短路径问题 *n; cout * 5 退出 *n; coutn; switch(n) case 1:break; case 2:break; case 3:break; case 4:break; case 5:break; default: if (n!=6) coutn; switch(n) case 1:UDG();break; ca

7、se 2:UDN();break; case 3:DG();break; case 4:DN();break; default: if (n!=5) cout错误,重新输入n; while(n!=5);无论多少级菜单,都可以用这种模式实现,并且当前菜单不用担心前面的问题,只需编写当前的功能函数第三步:添加功能函数二、测试1.无向图的基本操作及应用(课本P157,G2)课本P168,(a)2.无向网的基本操作及应用(类似课本P168,(a)课本P174,(a)3.有向图的基本操作及应用(课本P157,G1)4.有向网的基本操作及应用(课本P188, G6)三、使用说明按照图中的提示进行输入输出;

8、但有些事情是需要注意的:一:四种图的邻接矩阵存储结构的创建有相应的出错机制,出错后一般不会让执行程序终止,而四种图的邻接表存储结构的创建没有,只有在输入图的顶点数和弧(边)数时会有出错机制,在这以后输入出错就会让程序终止执行;二:邻接表存储结构中,在输入弧的弧头弧尾或边的顶点x和顶点y时,必须和之前输入的顶点名完全相同,邻接矩阵有出错机制,不用担心输错;三、输入顶点数,边数,弧数,权值只能是正整数,不能是字母或标点符号;四、在求关键路径和单源最短问题时,要确认输入的图是否是与该算法相关的图;五、每次输入多余的数据会被屏蔽掉,不会出错。四、难点与收获对我来说,该程序设计的难度比较大,其主要难点有

9、以下几点:一:设计的知识范围广,由于数据结构学得不是很好,所以很多算法只是一知半解,虽然能够理解,但要是自己独立去实现,不去查找和参考相关的资料,几乎是很难按时完成任务;二:代码没有好的设计理念和层次,完成时警告非常多,有时候感觉这有点打击人的信心;三:部分算法只是知其然,而不知所以然,没有完全掌握。比如,该程序所以的实现代码中只有邻接矩阵和邻接表存储结构的定义,四种图的创建和显示是自己独立完成的,其他的算法只是修改了一下,自己敲上去的。还有图的邻接矩阵有相应的较为完善的出错机制,输入错误和多余的输入并不会引起程序死机,限于时间关系,图的邻接存储结构只有简单的出错机制。我的主要收获有以下几点:

10、1调试。这是我收获最大的一部分之一。不管你解决问题的方案写的多完善,不管你的实现过程写的多么详细,如果程序调试不过关,一切都是白搭。尤其是超过 200行的代码,如果你不懂得调试,那么你的程序将会漏洞百出,甚至不知道错在何处。2.编程模块。超过 300 行的代码最好放在另一个头文件中,用#include包含在主程序中,避免主程序过于臃肿,也可以做成编程模块,还提高了程序的重用率。3.fllush(stdin)和头文件crtexe.c.。在输入过程中,如果不小心多输入了其他的字符,很可能让执行程序终止执行,fflush(stdin)可以只提取要输入的那部分字符,将多余的输入舍弃。五、实现代码下面依

11、次有以下几个文件:Main.cpp, Graph.h , Sqstack.h, CirQueue.h, UDGraph,h, UNGraph.h , DGraph.h, DNGraph.h。 /main.cpp#include #include using namespace std;typedef char VertexType;#include Graph.h#include UDGraph.h#include UNGraph.h#include DGraph.h#include DNGraph.hvoid ShowMainMenu()coutn;cout*图的基本操作及应用*n;cout

12、* 1 无向图的基本操作及应用*n;cout* 2 无向网的基本操作及应用*n;cout* 3 有向图的基本操作及应用*n;cout* 4 有向网的基本操作及应用*n;cout* 5 退出*n;cout*n;void UDG()MGraph MG;ALGraph ALG;int n;docoutn;cout*无向图的基本操作及应用*n;cout* 1 创建无向图的邻接矩阵*n;cout* 2 创建无向图的邻接表*n;cout* 3 无向图的深度优先遍历*n;cout* 4 无向图的广度优先遍历*n;cout* 5 退出*n;coutn;switch(n)case 1:CreatUDG_M(MG

13、);break;case 2:CreatUDG_ALG(ALG);dispgraph(ALG);break;case 3:CreatUDG_ALG(ALG);dfstraverse(ALG);/进行深度优先遍历的输出break;case 4:CreatUDG_M(MG);BFSTraver(MG);/进行广度优先遍历的输出break;default:if (n!=5)cout错误,重新输入n;while(n!=5);void UDN()MGraph MG;ALGraph ALG;int n;docoutn;cout*无向网的基本操作及应用*n;cout* 1 创建无向网的邻接矩阵*n;cout

14、* 2 创建无向网的邻接表*n;cout* 3 prim 算法求最小生成树*n;cout* 4 kraskal 算法求最小生成树*n;cout* 5 退出*n;coutn;switch(n)case 1:CreateUDN_M(MG);break;case 2:CreateUDN(ALG);dispUDN(&ALG);break;case 3:CreateUDN_M(MG);prim(MG);break;case 4:CreateUDN_M(MG);Kruskal(MG);break;default:if (n!=5)cout错误,重新输入n;while(n!=5);void DG()MGra

15、ph MG;ALGraph ALG;int n;docoutn;cout*有向图的基本操作及应用*n;cout* 1 创建有向图的邻接矩阵*n;cout* 2 创建有向图的邻接表*n;cout* 3 拓扑排序*n;cout* 4 退出*n;coutn;switch(n)case 1:CreatDG_M(MG);break;case 2:CreatDG_ALG(ALG);dispgraph(ALG);break;case 3:CreatDG_ALG(ALG);TopologicalSort(ALG);break;default:if (n!=4)cout错误,重新输入n;while(n!=4);

16、void DN()MGraph MG;ALGraph ALG;int n;PathMatrix p1;ShortPathTable d1;dist2 d;path2 p;docoutn;cout*有向网的基本操作及应用*n;cout* 1 创建有向网的邻接矩阵*n;cout* 2 创建有向网的邻接表*n;cout* 3 关键路径*n;cout* 4 单源顶点最短路径问题*n;cout* 5 每对顶点最短路径问题*n;cout* 6 退出*n;coutn;switch(n)case 1:CreateDNG_M(MG);break;case 2:CreateDN(ALG);dispDN(&ALG)

17、;break;case 3:CreateDN(ALG);CriticalPath(ALG);break;case 4:CreateDNG_M(MG);ShortestPath(MG,1,p1,d1);break;case 5:CreateDNG_M(MG);Floyd(MG,p,d);break;default:if (n!=6)coutn;switch(n)case 1:UDG();break;case 2:UDN();break;case 3:DG();break;case 4:DN();break;default:if (n!=5)cout=S.stacksize)/判断栈没有满S.ba

18、se=(ElemType *) realloc(S.base,(S.stacksize + 10) * sizeof(ElemType);if(!S.base)exit(-1);S.top=S.base+S.stacksize;S.stacksize +=10;*(S.top+)=e;+S.length;int Pop(SqStack &S,ElemType &e)/*删除栈顶元素*/if(S.top=S.base) return 0;e=*-S.top;-S.length;return 1;-/CirQueue.hstruct Queue/创建队列的数据结构类型int save20;int

19、tou,wei;/initialvoid InitQueue(Queue *q)/初始化一个队列,各元素都至空int i;for(i=0;isavei=0;q-tou=0;q-wei=0;/EnQueuevoid EnQueue(Queue *q,int n)/在队尾插入元素 n 为队列的一个新元素q-saveq-wei=n;q-wei+;/DeQueuevoid DeQueue(Queue *q,int &n)/删除 q 的队头元素,并用 n 返回n=q-saveq-tou;q-tou+;/Emptyint QueueEmpty(Queue *q)/把整个队列置空if(q-tou=q-wei)return 0;elsereturn 1;/

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2