c语言数据结构中如何调用创建无向网的函数
时间: 2023-08-11 19:06:55 浏览: 49
在C语言中,创建无向网可以使用邻接矩阵或邻接表两种数据结构。因此,创建无向网的函数也可以分为两种,分别是使用邻接矩阵表示的函数和使用邻接表表示的函数。
以下是使用邻接矩阵表示无向网的函数示例:
```c
#define MAX_VERTEX_NUM 20
#define INFINITY 65535 // 表示无穷大
typedef struct {
int vexs[MAX_VERTEX_NUM]; // 存储顶点的数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的邻接矩阵
int vexnum, arcnum; // 顶点数和边数
} MGraph;
// 创建无向网的函数
void CreateMGraph(MGraph *G) {
// 读入顶点数和边数
scanf("%d %d", &G->vexnum, &G->arcnum);
// 初始化邻接矩阵
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = INFINITY;
}
}
// 读入顶点信息
for (int i = 0; i < G->vexnum; i++) {
scanf("%d", &G->vexs[i]);
}
// 读入边信息,构建邻接矩阵
for (int k = 0; k < G->arcnum; k++) {
int i, j, w;
scanf("%d %d %d", &i, &j, &w);
G->arcs[i][j] = G->arcs[j][i] = w;
}
}
```
以上代码中,MGraph是一个邻接矩阵表示的无向网结构体,CreateMGraph是创建无向网的函数。在函数中,首先读入顶点数和边数,然后初始化邻接矩阵和读入顶点信息。最后,读入边信息并构建邻接矩阵。
以下是使用邻接表表示无向网的函数示例:
```c
#define MAX_VERTEX_NUM 20
#define INFINITY 65535 // 表示无穷大
typedef struct ArcNode {
int adjvex; // 邻接点编号
int weight; // 权值
struct ArcNode *next; // 指向下一个邻接点的指针
} ArcNode;
typedef struct {
int data; // 存储顶点的数据
ArcNode *first; // 指向第一个邻接点的指针
} VNode;
typedef struct {
VNode adjlist[MAX_VERTEX_NUM]; // 存储顶点的数组
int vexnum, arcnum; // 顶点数和边数
} ALGraph;
// 创建无向网的函数
void CreateALGraph(ALGraph *G) {
// 读入顶点数和边数
scanf("%d %d", &G->vexnum, &G->arcnum);
// 读入顶点信息
for (int i = 0; i < G->vexnum; i++) {
scanf("%d", &G->adjlist[i].data);
G->adjlist[i].first = NULL;
}
// 读入边信息,构建邻接表
for (int k = 0; k < G->arcnum; k++) {
int i, j, w;
scanf("%d %d %d", &i, &j, &w);
ArcNode *p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = j;
p->weight = w;
p->next = G->adjlist[i].first;
G->adjlist[i].first = p;
p = (ArcNode*)malloc(sizeof(ArcNode));
p->adjvex = i;
p->weight = w;
p->next = G->adjlist[j].first;
G->adjlist[j].first = p;
}
}
```
以上代码中,ALGraph是一个邻接表表示的无向网结构体,CreateALGraph是创建无向网的函数。在函数中,首先读入顶点数和边数,然后读入顶点信息。最后,读入边信息并构建邻接表。
无论使用邻接矩阵还是邻接表,都可以通过调用CreateMGraph或CreateALGraph函数来创建无向网。