用C语言代码编写程序实现“邻接表和邻接矩阵”
时间: 2024-11-23 21:10:58 浏览: 4
数据结构学习--图的邻接矩阵和邻接表存储
在C语言中,我们可以使用结构体和数组来实现邻接表和邻接矩阵这两种图的表示方法。
**邻接表**:
邻接表通常用于稀疏图,它存储每个顶点的所有邻居。每条边都由一个指向连接两个顶点的链表元素表示。以下是简单的邻接表实现:
```c
#include <stdio.h>
typedef struct Node {
int dest; // 邻居节点编号
struct Node* next; // 指向下一个邻居的指针
} Edge;
typedef struct Graph {
int V; // 顶点数
Edge** adj; // 顶点到边的动态数组
} Graph;
void addEdge(Graph* graph, int src, int dest) {
Edge* new_edge = (Edge*)malloc(sizeof(Edge));
new_edge->dest = dest;
new_edge->next = graph->adj[src];
graph->adj[src] = new_edge;
}
// 添加其他必要的函数,如初始化、遍历等
```
**邻接矩阵**:
邻接矩阵是二维数组,其中行代表源节点,列代表目标节点,元素值表示是否有边。对于密集图,这种方法更有效。例如:
```c
typedef struct {
int V;
int matrix[V][V]; // 对角线为0,表示无边
} AdjMatrixGraph;
void addEdgeToAdjMat(AdjMatrixGraph* graph, int src, int dest) {
if (src != dest)
graph->matrix[src][dest] = 1; // 有边则置1,对称图中无需自连
}
```
阅读全文