数据结构图的遍历实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题目:图的遍历的实现
完成日期:2011.12.22
一、需求分析
1.本演示程序中,输入的数据类型均为整型数据,不允许输入字符等其他数据类型,且需要按照提示内容进行输入,成对的关系数据必须在所建立的图中已经存在对应的结点。
2.演示程序以用户和计算机的对话方式执行,在计算机终端上显示的提示信息的说明下,按照要求输入数据,运算结果在其后显示。
3.本程序实现分别基于邻接矩阵和邻接表存储结构的有、无向图,有、无向网的建立和遍历。遍历分DFS和BFS两种算法,并分别以递归和非递归形式实现。
4.测试数据:
(1)无向图结点数 4 弧数 3 结点:1 2 3 4 结点关系:1 2;1 3;2 4
(2)有向图结点数 6 弧数 6 结点:1 2 3 4 5 6 结点关系:1 2;1 3;2 4;3 5;
3 6;2 5
二、概要设计
为实现上述程序功能,图的存储结构分为邻接矩阵和邻接表两种。遍历过程中借助了栈和队列的存储结构。
1.邻接矩阵存储结构的图定义:
ADT mgraph{
数据对象V:V是具有相同特性的的数据元素的集合,成为顶点集。
数据关系 R:
R={VR}
VR={
基本操作 P:
locatevex(G, mes);
初始条件:图G存在,mes和G中顶点有相同的特征。
操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。
createudn( & G);
初始条件:图G 存在。
操作结果:创建无向图。
createdn( & G);
初始条件:图G 存在。
操作结果:创建有向图。
createudg( & G);
初始条件:图G 存在。
操作结果:创建无向网。
createdg(& G);
初始条件:图G 存在。
操作结果:创建有向网。
DFS(G,v);
初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。
操作结果:深度优先搜索遍历图G,访问顶点时使用函数visit.
BFS(G,v);
初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。
操作结果:广度优先搜索遍历图G,访问顶点时使用函数visit.
visit( a);
初始条件:a为图中的某个顶点值。
操作结果:访问顶点a,本程序中作用结果为输出顶点值。
}ADT mgraph
2.邻接表存储结构的图定义:
ADT algraph{
数据对象V:V是具有相同特性的的数据元素的集合,成为顶点集。
数据关系 R:
R={VR}
VR={
基本操作 P:
locatevex(G, mes);
初始条件:图G存在,mes和G中顶点有相同的特征。
操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其他信息。
createudn( & G);
初始条件:图G 存在。
操作结果:创建无向图。
createdn( & G);
初始条件:图G 存在。
操作结果:创建有向图。
createudg( & G);
初始条件:图G 存在。
操作结果:创建无向网。
createdg(& G);
初始条件:图G 存在。
操作结果:创建有向网。
DFS(G,v);
初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。
操作结果:深度优先搜索遍历图G,访问顶点时使用函数visit.
BFS(G,v);
初始条件:图G已经存在并被赋值,v是图中某个顶点的位置坐标。
操作结果:广度优先搜索遍历图G,访问顶点时使用函数visit.
visit( a);
初始条件:a为图中的某个顶点值。
操作结果:访问顶点a,本程序中作用结果为输出顶点值。
}ADT algraph
3.主程序流程:
定义并创建图
status creatgraph(mgraph & G)
{
cout<<"请选择构造的图的类型:( 1:有向图,2:有向网,3:无向图,4:无向网)"
< int kind; scanf("%d",& kind); switch (kind)//通过选择确定创建哪一种图; { case 1: return createdg(G); case 2: return createdn(G); case 3:return createudg(G); case 4: return createudn(G); default: return error; } } 然后采用DFS或BFS进行遍历(访问结果为输出顶点值)。 4.函数的调用关系图: main visit locatevex linkqueue enqueue gethead dequeue destroyqueue