c语言编程完成图的邻接矩阵和邻接表的创建
时间: 2024-02-01 10:15:17 浏览: 60
数据结构学习--图的邻接矩阵和邻接表存储
邻接矩阵:
```c
#include <stdio.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 存放顶点的数组
int edge[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存放边的二维数组
int vertex_num, edge_num; // 顶点数和边数
} Graph;
void createGraph(Graph *g) {
printf("请输入顶点数和边数:\n");
scanf("%d%d", &g->vertex_num, &g->edge_num);
getchar(); // 消去回车符
printf("请输入顶点信息:\n");
for (int i = 0; i < g->vertex_num; i++) {
printf("第%d个顶点:", i + 1);
scanf("%d", &g->vertex[i]);
getchar(); // 消去回车符
}
// 初始化邻接矩阵
for (int i = 0; i < g->vertex_num; i++) {
for (int j = 0; j < g->vertex_num; j++) {
g->edge[i][j] = 0;
}
}
printf("请输入边信息(起点 终点):\n");
for (int k = 0; k < g->edge_num; k++) {
int i, j;
scanf("%d%d", &i, &j);
g->edge[i-1][j-1] = g->edge[j-1][i-1] = 1;
}
}
int main() {
Graph g;
createGraph(&g);
return 0;
}
```
邻接表:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
typedef struct ArcNode {
int adjvex; // 该弧所指向的顶点的位置
struct ArcNode *nextarc; // 指向下一条弧的指针
int info; // 该弧相关信息的指针
} ArcNode;
typedef struct VNode {
int data; // 顶点信息
ArcNode *firstarc; // 指向第一条依附该顶点的弧的指针
} VNode;
typedef struct {
VNode adjlist[MAX_VERTEX_NUM]; // 存放邻接表的数组
int vertex_num, edge_num; // 顶点数和边数
} Graph;
void createGraph(Graph *g) {
printf("请输入顶点数和边数:\n");
scanf("%d%d", &g->vertex_num, &g->edge_num);
getchar(); // 消去回车符
printf("请输入顶点信息:\n");
for (int i = 0; i < g->vertex_num; i++) {
printf("第%d个顶点:", i + 1);
scanf("%d", &g->adjlist[i].data);
g->adjlist[i].firstarc = NULL; // 初始化指针为空
getchar(); // 消去回车符
}
printf("请输入边信息(起点 终点):\n");
for (int k = 0; k < g->edge_num; k++) {
int i, j;
scanf("%d%d", &i, &j);
// 创建一个新的弧结点
ArcNode *p = (ArcNode*) malloc(sizeof(ArcNode));
p->adjvex = j-1;
p->nextarc = g->adjlist[i-1].firstarc; // 将新结点插入到指定顶点的链表中
g->adjlist[i-1].firstarc = p;
// 创建另一个新的弧结点
ArcNode *q = (ArcNode*) malloc(sizeof(ArcNode));
q->adjvex = i-1;
q->nextarc = g->adjlist[j-1].firstarc; // 将新结点插入到指定顶点的链表中
g->adjlist[j-1].firstarc = q;
}
}
int main() {
Graph g;
createGraph(&g);
return 0;
}
```
阅读全文