数据结构图的存储c代码
时间: 2024-05-24 22:09:29 浏览: 11
数据结构图的存储有多种方式,其中比较常用的方式是邻接矩阵和邻接表。下面分别介绍这两种方式的C代码实现:
1. 邻接矩阵:
邻接矩阵是用一个二维数组来表示图的连接关系,其中数组的行和列分别对应于图中的节点,如果两个节点之间存在边,则数组中对应的元素值为1,否则为0。下面是邻接矩阵的C代码实现:
```c
#define MAX_VERTEX_NUM 100 // 图的最大节点数
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 节点数组
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵数组
int vertex_num, arc_num; // 节点数和边数
} Graph;
void create_graph(Graph *g) {
int i, j, k;
// 初始化节点和邻接矩阵
for (i = 0; i < MAX_VERTEX_NUM; i++) {
g->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
g->arc[i][j] = 0;
}
}
// 输入节点数和边数
printf("请输入节点数和边数:\n");
scanf("%d%d", &g->vertex_num, &g->arc_num);
// 输入每个节点的值
printf("请输入每个节点的值:\n");
for (i = 0; i < g->vertex_num; i++) {
scanf("%d", &g->vertex[i]);
}
// 输入每条边的起点和终点
printf("请输入每条边的起点和终点:\n");
for (k = 0; k < g->arc_num; k++) {
scanf("%d%d", &i, &j);
g->arc[i][j] = 1;
g->arc[j][i] = 1; // 无向图需要设置两个方向的连接关系
}
}
```
2. 邻接表:
邻接表是用一个链表数组来表示图的连接关系,其中数组的每个元素对应于一个节点,链表中存储着该节点所连向的所有节点。下面是邻接表的C代码实现:
```c
#define MAX_VERTEX_NUM 100 // 图的最大节点数
typedef struct ArcNode { // 边节点结构体
int adjvex; // 该边所指向的节点位置
struct ArcNode *nextarc; // 指向下一条边的指针
} ArcNode;
typedef struct VNode { // 节点结构体
int data; // 节点值
ArcNode *firstarc; // 指向第一条依附该节点的边的指针
} VNode;
typedef struct {
VNode adjlist[MAX_VERTEX_NUM]; // 邻接表数组
int vertex_num, arc_num; // 节点数和边数
} Graph;
void create_graph(Graph *g) {
int i, j, k;
ArcNode *p;
// 初始化邻接表
for (i = 0; i < MAX_VERTEX_NUM; i++) {
g->adjlist[i].data = 0;
g->adjlist[i].firstarc = NULL;
}
// 输入节点数和边数
printf("请输入节点数和边数:\n");
scanf("%d%d", &g->vertex_num, &g->arc_num);
// 输入每个节点的值
printf("请输入每个节点的值:\n");
for (i = 0; i < g->vertex_num; i++) {
scanf("%d", &g->adjlist[i].data);
}
// 输入每条边的起点和终点
printf("请输入每条边的起点和终点:\n");
for (k = 0; k < g->arc_num; k++) {
scanf("%d%d", &i, &j);
p = (ArcNode *) malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextarc = g->adjlist[i].firstarc;
g->adjlist[i].firstarc = p;
p = (ArcNode *) malloc(sizeof(ArcNode));
p->adjvex = i;
p->nextarc = g->adjlist[j].firstarc;
g->adjlist[j].firstarc = p; // 无向图需要设置两个方向的连接关系
}
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)