《数据结构》实验报告(六)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验报告(六)
图的操作(3学时)
一、实验目的
1、掌握图的顺序和链式存储结构及其编程。
2、熟悉图的邻接矩阵建立及输出等基本操作。
二、实验内容
1、根据下列程序环境的设置,注释下列标记的语句,并填写下表中的问题。#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define OVERFLOW -2
#define elemType elemtype
typedef int status;
//下面添加图相关的定义
#define max 20 //最大顶点数设为20
typedef char vertextype; //顶点类型设为字符型
typedef int edgetype; //边的权值设为整型
typedef struct Mgraph
{ vertextype vexs[max]; //顶点数组
edgetype edges[max][max]; //邻接矩阵,即边表
int n,e; //顶点数和边数
}Mgraph; //Mgraph是以邻接矩阵存储的图类型
//邻接链表的结构定义
typedef struct arcnode /*注1*/
{ int adjvex; /*注2*/
struct arcnode *next; /*注3*/
int info;
}arcnode;
typedef struct Vnode /*注4*/
{ vertextype data; /*注5*/
arcnode * first; /*注6*/
}Vnode;
typedef struct
{
Vnode adjList[max]; /*注7*/
int n,e; /*注8*/
}ALGraph; /*注9*/
表:
图变量Mgraph和ALGraph的不同是_______结构体内容不同_______________________
/*注1*/的内容是:_______声明一个结构体__________________________________
/*注2*/的内容是:_____________整型变量____________________________
/*注3*/的内容是:________ arcnode 类型的指针_________________________________
/*注4*/的内容是:________声明一个结构体_________________________________
/*注5*/的内容是:_________整型变量data________________________________
/*注6*/的内容是:________ arcnode 类型的指针_________________________________
/*注7*/的内容是:_______ Vnode 的数组__________________________________
/*注8*/的内容是:__________声明两个整型变量n e_______________________________ /*注9*/的内容是:__________结构体名字ALGraph_______________________________
2、在第1题的基础上,输入下面的创建图的邻接矩阵的函数。回答下列问题并填写到
下表中。
//建立一个图的邻接矩阵
void Createmgraph(Mgraph &G, int n1, int e1,int kind)
{ //建立顶点数为n1,边数为e1的图G的邻接矩阵存储
int i,j,k,w=kind; //kind=0为有向图;kind=1为无向图
char ch;
getchar();
G.e=e1; /*注1*/
G.n=n1; /*注2*/
printf("请输入顶点信息(输入格式为:顶点字符<回车>,如:abcde<回车>):\n");
//输入顶点信息,建立顶点表
for(i=1;i<=G.n;i++)
scanf("%c",&(G.vexs[i]));
getchar();
for (i=1;i<=G.n;i++)
for (j=1;j<=G.n;j++) G.edges[i][j]=0; //初始化邻接矩阵
printf("请输入每条边对应的两个顶点的序号(输入格式为:i,j):\n");
//输入e条边,建立邻接矩阵G.edges[i][j]=1;
for (k=1;k<=G.e;k++)
{ scanf("%d,%d",&i,&j); G.edges[i][j]=1; /*注3*/ if(kind) G.edges[j][i]=G.edges[i][j]; /*注4*/
}
}
表:
函数名是:_______ Createmgraph ___________________
该函数参数个数和含义是:_______数组点数边数____有无向________________
函数中图的顶点信息存储在:___________ G.n _____________________________
函数中边的数组是:_______________ G.e __________________________
/*注1*/的内容是:____________将顶点数__给GN_______________________
/*注2*/的内容是:______________将边数给GE_________________________
/*注3*/的内容是:______________输入两条相邻边的顶点___________________________ /*注4*/的内容是:_________判断如果是无向图对应节点为1__________________________
3、在第1和第2题的基础上,编写显示图中顶点和边的函数。