当前位置: 首页 > news >正文

数据结构:图;邻接矩阵和邻接表

 邻接矩阵:

1.概念:

邻接矩阵是图的存储结构之一,通过二维数组表示顶点间的连接关系。

2.具体例子 :

一.无向图邻接矩阵示例:

示例图(顶点:A、B、C,边:A-B、B-C):

邻接矩阵:
  A B C  
A 0 1 0  
B 1 0 1  
C 0 1 0  

特点

  1. 矩阵对称,主对角线为0(无自环边)。
  2. 顶点B的度为2,对应第2行/列非零元素数量。
  3. 非零元素总数=边数×2(无向图双向性)。

二、有向图邻接矩阵示例

示例图(顶点:V1→V2、V2→V3、V3→V1):

邻接矩阵:
   V1 V2 V3  
V1 0   1  0  
V2 0   0  1  
V3 1   0  0  

特点

  1. 矩阵不对称(边方向性)。
  2. V3的入度=1(第3列非零数),出度=1(第3行非零数)。

三、带权图(网)邻接矩阵示例

示例图(顶点:A、B、C,边:A-B权2,B-C权5):

邻接矩阵(∞表示无穷):
  A   B     C  
A 0   2     ∞  
B 2   0     5  
C ∞   5     0  

特点

  1. 权值替代0/1,主对角线仍为0。
  2. 对称性保留(无向网),稀疏图可能用压缩存储。

邻接表:

概念:

邻接表是图数据结构最常用的链式存储方式,通过数组与链表结合实现顶点与边的离散化存储。

  1. 组成结构
    • 顶点表(头节点表):一维数组存储顶点信息,每个元素包含顶点值和指向首个邻接点的指针。
    • 边表(链表节点):每个顶点对应的链表,存储其所有邻接点的索引(或地址)及边权重(网图)。例如顶点A的链表包含C,表示存在边AC。

示例图结构:

假设存在无向图如下(顶点:A、B、C、D;边:A-B、A-C、B-C、B-D、C-D):

 A 
/ \
B——C 
 \ /
  D 

邻接表存储实现

1. 顶点表(顺序存储)

顶点表使用数组存储,每个元素包含顶点信息和指向邻接链表的指针:

顶点表索引 | 顶点数据 | 边表头指针 
---------------------------------
0         |   A     | → 1 → 2 → NULL 
1         |   B     | → 0 → 2 → 3 → NULL 
2         |   C     | → 0 → 1 → 3 → NULL 
3         |   D     | → 1 → 2 → NULL 
2. 边表(链表存储)

每个顶点的边表以链表形式存储邻接顶点(本例使用头插法):

  • 顶点A的邻接链表:B(索引1)、C(索引2)
  • 顶点B的邻接链表:A(索引0)、C(索引2)、D(索引3)
  • 顶点C的邻接链表:A(索引0)、B(索引1)、D(索引3)
  • 顶点D的邻接链表:B(索引1)、C(索引2)
// C语言实现(无向图)
typedef struct ArcNode {    // 边表节点 
    int adjvex;             // 邻接顶点索引 
    struct ArcNode *next;   // 指向下一邻接点 
} ArcNode;

typedef struct VNode {      // 顶点表节点 
    char data;              // 顶点数据 
    ArcNode *firstarc;      // 指向第一个邻接点 
} VNode, AdjList[MAX_VERTEX];

typedef struct {
    AdjList vertices;       // 顶点表数组 
    int vexnum, arcnum;     // 顶点数和边数 
} ALGraph;

相关文章:

  • 深度解析HTTP/HTTPS协议:从原理到实践
  • 3.buuctf [BSidesCF 2019]Kookie
  • 人工智障的软件开发-git仓库篇-弃gitlab,走gitea
  • 免费大模型网站
  • vue-model如何自定义指令,及批量注册自定义指令
  • 【Java】StringBuffer与StringBuilder详解
  • 数据库系统原理——第十一章并发控制复习题
  • Spring Boot 开发入门
  • 【设计模式】【结构型模式】装饰者模式(Decorator)
  • mysqld_exporter的搭建
  • webstorm提示ESlint: please specify Node.js interpreter
  • 前端面试手写--虚拟列表
  • Python实现语音识别详细教程【2025】最新教程
  • Ollama 开发指南
  • 应用层协议 HTTP 讲解实战:从0实现HTTP 服务器
  • Ubuntu 下 nginx-1.24.0 源码分析 - ngx_time_update函数
  • NAC网络接入控制三种认证方式802.1X认证、MAC认证和Portal认证
  • Python 文本探秘:正则表达式的易错迷宫穿越 -- 7. 正则表达式
  • 模糊聚类分析方法:从模糊等价矩阵到动态分类
  • 笔记: 利用二极管、三极管、MOS管搭建过压保护电路
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • “80后”商洛市委副书记、市政府党组副书记赵孝任商洛市副市长
  • 陕西省副省长窦敬丽已任宁夏回族自治区党委常委、统战部部长
  • 15世纪以来中国文化如何向欧洲传播?《东学西传文献集成初编》发布
  • 日本希望再次租借大熊猫,外交部:双方就相关合作保持密切沟通
  • 言短意长|政府食堂、停车场开放的示范效应