数据结构图实验报告汇总.docx

上传人:b****4 文档编号:816204 上传时间:2022-10-13 格式:DOCX 页数:27 大小:76.63KB
下载 相关 举报
数据结构图实验报告汇总.docx_第1页
第1页 / 共27页
数据结构图实验报告汇总.docx_第2页
第2页 / 共27页
数据结构图实验报告汇总.docx_第3页
第3页 / 共27页
数据结构图实验报告汇总.docx_第4页
第4页 / 共27页
数据结构图实验报告汇总.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数据结构图实验报告汇总.docx

《数据结构图实验报告汇总.docx》由会员分享,可在线阅读,更多相关《数据结构图实验报告汇总.docx(27页珍藏版)》请在冰豆网上搜索。

数据结构图实验报告汇总.docx

数据结构图实验报告汇总

一、实验目的和要求

(1)掌握图的相关概念,包括图,有向图,无向图,完全图,子图,连通图,度,入度,出度,简单回路和环等定义。

(2)重点掌握图的各种存储结构,包括邻接矩阵和邻接表等。

(3)重点掌握图的基本运算,包括创建图,输出图,深度优先遍历,广度优先遍历等。

(4)掌握图的其他运算,包括最小生成树,最短路径,拓扑排序和关键路径等算法。

(5)灵活运用图这种数据结构解决一些综合应用问题。

二、实验内容和方法

(1)实验内容:

1、编写一个程序algo8-1.cpp,实现不带权图和带权图的邻接矩阵与邻接表的相互转换算法、输出邻接矩阵与邻接表的算法,并在此基础上设计一个程序exp8-1.cpp实现如下功能:

①建立如图1所示的有向图G的邻接矩阵,并输出;

②由有向图G的邻接矩阵产生邻接表,并输出;

③再由②的邻接表产生对应的邻接矩阵,并输出。

 

图1

 

2、编写一个程序algo8-2.cpp,实现图的遍历运算,并在此基础上设计一个程序exp8-2.cpp完成如下功能:

①输出图1所示的有向图G从顶点0开始的深度优先遍历序列(递归算法);

②输出图1所示的有向图G从顶点0开始的深度优先遍历序列(非递归算法);

③输出图1所示的有向图G从顶点0开始的广度优先遍历序列。

3、设计一个程序exp8-3.cpp,采用邻接表存储图,并输出图8.1(a)中从指定顶点1出发的所有深度优先遍历序列。

(2)实验方法:

1、综合运用课本所学的知识,用不同的算法实现在不同的程序功能。

2、结合指导老师的指导,解决程序中的问题,正确解决实际中存在的异常情况,逐步改善功能。

3、根据实验内容,编译程序。

三、实验环境:

Windows7,VisualC++6.0

三、实验过程描述

文件graph.h中定义了图的邻接矩阵表示类型和邻接表表示类型,该头文件在以下三个实验中都会使用到。

其代码如下:

 

VertexTypevexs[MAXV];

}MGraph;

//以下定义邻接表类型

typedefstructANode

{

intadjvex;

structANode*nextarc;

InfoTypeinfo;

}ArcNode;

typedefintVertex;

typedefstructVNode

{

Vertexdata;

ArcNode*firstarc;

}VNode;

typedefVNodeAdjList[MAXV];

typedefstruct

{

AdjListadjlist;

intn,e;

}ALGraph;

#endif//GRAPH_H_INCLUDED

 

实验①

源程序。

一、输入如下所示程序;

//文件名:

exp8-1.cpp

#include

#include

#include"graph.h"

externvoidMatToList1(MGraph,ALGraph*&);

externvoidListToMat1(ALGraph*,MGraph&);

externvoidDispMat1(MGraph);

externvoidDispAdj1(ALGraph*);

 

intmain()

{

inti,j;

MGraphg,g1;

ALGraph*G;

intA[MAXV][6]={{0,5,INF,7,INF,INF},{INF,0,4,INF,INF,INF},

{8,INF,0,INF,INF,9},{INF,INF,5,0,INF,6},

{INF,INF,INF,5,0,INF},{3,INF,INF,INF,1,0}};

g.n=6;

g.e=10;

for(i=0;i

for(j=0;j

g.edges[i][j]=A[i][j];

printf("有向图G的邻接矩阵:

\n");

DispMat1(g);

G=(ALGraph*)malloc(sizeof(ALGraph));

printf("图G的邻接矩阵转换成邻接表:

\n");

MatToList1(g,G);

DispAdj1(G);

printf("图G的邻接表转换成邻接矩阵:

\n");

ListToMat1(G,g1);

DispMat1(g1);

return0;

}

 

//文件名:

algo8-1.cpp

#include

#include

#include"graph.h"

//不带权图的算法

voidMatToList(MGraphg,ALGraph*&G)

{

inti,j;

ArcNode*p;

G=(ALGraph*)malloc(sizeof(ALGraph));

for(i=0;i

for(j=g.n-1;j>=0;j--)

 

if(g.edges[i][j]!

=0)

{

p=(ArcNode*)malloc(sizeof(ArcNode));

p->adjvex=j;

p->nextarc=G->adjlist[i].firstarc;

G->adjlist[i].firstarc=p;

}

G->n=g.n;

G->e=g.e;

}

voidListToMat(ALGraph*G,MGraph&g)

{

inti,j;

ArcNode*p;

for(i=0;in;i++)

for(j=0;jn;j++)

g.edges[i][j]=0;

for(i=0;in;i++)

{

p=G->adjlist[i].firstarc;

while(p!

=NULL)

{

g.edges[i][p->adjvex]=1;

p=p->nextarc;

}

}

g.n=G->n;

g.e=G->e;

}

voidDispMat(MGraphg)

{

inti,j;

for(i=0;i

{

for(j=0;j

printf("%3d",g.edges[i][j]);

printf("\n");

}

}

voidDispAdj(ALGraph*G)

{

inti;

ArcNode*p;

for(i=0;in;i++)

{

p=G->adjlist[i].firstarc;

printf("%3d:

",i);

while(p!

=NULL)

{

printf("%3d",p->adjvex);

p=p->nextarc;

}

printf("\n");

}

}

//带权图的算法

voidMatToList1(MGraphg,ALGraph*&G)

{

inti,j;

ArcNode*p;

G=(ALGraph*)malloc(sizeof(ALGraph));

for(i=0;i

G->adjlist[i].firstarc=NULL;

for(i=0;i

for(j=g.n-1;j>=0;j--)

if(g.edges[i][j]!

=0&&g.edges[i][j]!

=INF)

{

p=(ArcNode*)malloc(sizeof(ArcNode));

p->adjvex=j;

p->info=g.edges[i][j];

p->nextarc=G->adjlist[i].firstarc;

G->adjlist[i].firstarc=p;

}

G->n=g.n;

G->e=g.e;

}

voidListToMat1(ALGraph*G,MGraph&g)

{

inti,j;

ArcNode*p;

for(i=0;in;i++)

for(j=0;jn;j++)

if(i==j)

g.edges[i][j]=0;

else

g.edges[i][j]=INF;

for(i=0;in;i++)

{

p=G->adjlist[i].firstarc;

while(p!

=NULL)

{

g.edges[i][p->adjvex]=p->info;

p=p->nextarc;

}

}

g.n=G->n;

g.e=G->e;

}

voidDispMat1(MGraphg)

{

inti,j;

for(i=0;i

{

for(j=0;j

if(g.edges[i][j]==INF)

printf("%3s","∞");

else

printf("%3d",g.edges[i][j]);

printf("\n");

}

}

voidDispAdj1(ALGraph*G)

{

inti;

ArcNode*p;

for(i=0;in;i++)

{

p=G->adjlist[i].firstarc;

printf("%3d:

",i);

while(p!

=NULL)

{

printf("%3d(%d)",p->adjvex,p->info);

p=p->nextarc;

}

printf("\n");

}

}

 

voidDispAdj1(ALGraph*G)

{

inti;

ArcNode*p;

for(i=0;in;i++)

{

p=G->adjlist[i].firstarc;

printf("%3d:

",i);

while(p!

=NULL)

{

printf("%3d(%d)",p->adjvex,p->info);

p=p->nextarc;

}

printf("\n");

}

}

 

二、编译并链接程序;

三、运行程序,结果如下图:

实验

源程序

一、输入如下所示程序;

//文件名:

exp8-2.cpp

#include

#include

#include"graph.h"

externvoidMatToList1(MGraph,ALGraph*&);

externvoidDispAdj1(ALGraph*G);

externvoidDFS(ALGraph*G,intv);

externvoidDFS1(ALGraph*G,intv);

externvoidDFS2(ALGraph*G,intv);

externvoidBFS(ALGraph*G,intv);

intmain()

{

inti,j;

MGraphg;

ALGraph*G;

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

当前位置:首页 > 经管营销 > 经济市场

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

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