图的建立及输出

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》课程设计说明书图的建立及输出

系、部:

学生姓名:

指导教师:职称

专业:信息与计算科学

班级:0903班

完成时间:2010·12·14

摘要

本设计主要是结合C语言和数据结构的知识对图进行建立和输出的操作,输入图相关信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

关键词课程设计;数据结构;图;无向图;存储结构;邻接矩阵

目录

1 设计内容及要求 (1)

1.1 设计内容 (1)

1.2 设计要求 (1)

2 设计思想 (2)

2.1 概要设计 (2)

2.2 详细设计 (2)

3 程序源代码 (4)

4 调试分析 (6)

5 课设总结 (8)

参考文献 (9)

1 设计内容和要求

1.1设计内容

图的建立及输出:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网),能够输入图的顶点和边的信息,并存储到相应存储结构中,而后输出图的邻接矩阵。

1.2 设计要求

1)源程序要有适当的注释,使程序容易阅读。

2)在上交资料中请写明:存储结构、基本算法(可以使用程序流程图)、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;

2 设计思想

2.1 概要设计

2.1.1 图存储结构的建立

本课题采用邻接矩阵的存储结构,即用两个数组分别存储元素(顶点)的信息和数据元素之间的关系(边或弧)的信息。以二维数组表示有n个顶点的图时,需存放n个顶点信息和n*n个弧信息的存储量。

本次课程设计的是无向图(即无权值的图,由于对其认识不深,在此设图的权值为1)、无向网的邻接矩阵存储结构,所以在主函数中先申请图的内存空间。在定义图的类型后即可输入图的相关信息,包括图的顶点数、边数、顶点信息以及边顶点信息和权值,并对邻接矩阵初始化。

2.1.2 图的邻接矩阵的输出

本设计中,图的邻接矩阵的信息在void CreatMGraph(MGraph *G)中生成后,再在main()函数中以for()以数组的形式输出。

2.2 详细设计

2.2.1 主程序中需要的全程量

#define MAX 999 //定义无穷

#define MaxVertexNum 100 // 定义最大顶点数

2.2.2 定义图的类型

typedef struct{

char vexs[MaxVertexNum]; //顶点表

int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表

int n,e; //图中的顶点数n和边数e

}MGraph; //用邻接矩阵表示的图的类型

2.2.3 建立图的邻接矩阵

建立函数,实现图的相关信息的输入,包括图的顶点数、边数、顶点信息、边的顶点信息和边的权值。其次,在函数中要有实现矩阵初始化的程序。

部分操作的伪代码如下:

void CreatMGraph(MGraph *G)

{

scanf("%d,%d",&G->n,&G->e); //输入顶点数和边数

scanf("%c",&a);

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

{

scanf("%c",&a);

G->vexs[i]=a; //读入顶点信息,建立顶点表

}

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

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

G->edges[i][j]=MAX; //初始化邻接矩阵

for(k=0;ke;k++) { //读入e条边,建立邻接矩阵 scanf("%d%d%d",&i,&j,&w); //输入边(Vi,Vj)的顶点序号

G->edges[i][j]=w;

G->edges[j][i]=w;

}

}

2.2.4 主函数的部分伪代码

在主函数中,主要是实现图的内存空间的申请以及并调用CreatMGraph(G)函数,最终实现邻接矩阵的输出。部分操作伪代码如下:

void main()

{ MGraph *G;

G=(MGraph *)malloc(sizeof(MGraph)); //为图G申请内存空间CreatMGraph(G);

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

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

printf("%d\t",G->edges[i][j]); //邻接矩阵的输出

}

}

3 程序源代码

#include"stdio.h"

#include"stdlib.h"

#define MAX 999 //定义无穷

#define MaxVertexNum 100 //定义最大顶点数

typedef struct{

char vexs[MaxVertexNum]; //顶点表

int edges[MaxVertexNum][MaxVertexNum]; //邻接矩阵,可看作边表 int n,e; //图中的顶点数n和边数e

}MGraph; //用邻接矩阵表示的图的类型

//=========建立邻接矩阵=======

typedef enum{FALSE,TRUE} Boolean;

Boolean visited[MaxVertexNum];

void CreatMGraph(MGraph *G)

{ int i,j,k,w;

char a;

printf("Input VertexNum(n) and EdgesNum(e): ");

scanf("%d,%d",&G->n,&G->e); //输入顶点数和边数

scanf("%c",&a);

printf("Input Vertex string:");

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

{

scanf("%c",&a);

G->vexs[i]=a; //读入顶点信息,建立顶点表

}

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

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

G->edges[i][j]=MAX; //初始化邻接矩阵

printf("Input edges,Creat Adjacency Matrix\n");

for(k=0;ke;k++) { //读入e条边,建立邻接矩阵 scanf("%d%d%d",&i,&j,&w); //输入边(Vi,Vj)的顶点序号

相关文档
最新文档