数据结构之邻接表


邻接表是一种表示图的数据结构,它通过链表的形式,将每个节点的邻居节点记录下来。具体原理如下:

  1. 对于每个节点,我们创建一个链表。链表中存储该节点所连接的所有边的信息。

  2. 对于每条边,我们在两个节点之间的链表中分别存储该边的信息。例如,如果节点A和节点B之间有一条边,我们会在节点A的链表中存储一条指向节点B的边,同时在节点B的链表中存储一条指向节点A的边。

  3. 通过邻接表,我们可以轻松地获取任意节点的邻居节点列表。只需访问该节点的链表即可。同时,我们也可以方便地实现图的遍历和搜索算法,如深度优先搜索和广度优先搜索。

邻接表相对于邻接矩阵,可以更好地处理稀疏图(即边数相对于节点数很小的图),因为邻接矩阵需要存储所有节点之间的连通情况,当图的边数远小于节点数时,会浪费很多空间。
在这里插入图片描述

一、C 语言实现邻接表及源码详解

邻接表是一种常用的图的表示方法,可以用来存储无向图和有向图。C语言可以通过结构体和指针来实现邻接表,以下是一个简单的示例代码:

#include <stdio.h>
#include <stdlib.h>

#define MAX_VERTEX_NUM 20

// 边表结点
typedef struct ArcNode {
   
    int adjvex;  // 该边所指向的顶点的位置
    struct ArcNode *next;  // 指向下一条边的指针
} ArcNode;

// 顶点表结点
typedef struct VertexNode {
   
    int data;  // 顶点的数据
    ArcNode *firstarc;  // 指向第一条边的指针
} VertexNode;

// 邻接表结构
typedef struct {
   
    VertexNode vertex[MAX_VERTEX_NUM];  // 顶点表
    int vexnum;                         // 顶点数
    int arcnum;                         // 边数
} Graph;

// 创建邻接表
void CreateGraph(Graph *G) {
   
    printf("请输入顶点数和边数:");
    scanf("%d %d", &(G->vexnum), &(G->arcnum));
    getchar
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值