数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念

博客介绍了图的多种存储结构,包括邻接矩阵(适用于稠密图,有向图和无向图有不同特点)、邻接表法(为顶点建单链表存相邻边)、十字链表(有向图链式存储)和临界多重表(无向图链式存储),还提及了各结构的相关属性和指针。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.邻接矩阵

在这里插入图片描述

  邻接矩阵法
  结点数为n的图G = (V,E)的邻接矩阵A是n×n的。
  将G的顶点编号为v1,v2,,...,Vn,(数组下标)
  若<vi,vj>∈E,则A[i][j]=1,否则A[i][j]=O。

在这里插入图片描述
在这里插入图片描述

1.1有向图

在这里插入图片描述
在这里插入图片描述

1.2无向图

在这里插入图片描述
在这里插入图片描述

#define MaxvertexNum 100
typedef char vertexType;
typedef int EdgeType;
typedef struct{
	vertexType vex[MaxvertexNum];
	EdgeType Edge [MaxvertexNum][MaxvertexNum];
	int vexnum, arcnum;
}MGraph;

在这里插入图片描述
·邻接矩阵法的空间复杂为O(n2),适用于稠密图
·无向图的邻接矩阵为对称矩阵
·无向图中第i行(或第i列)非0元素(非正无穷)的个数为第i个顶点的度;
有向图中第i行(第列)非0元素(非正无穷)的个数为第i个顶点的出度(入度)

在这里插入图片描述
★A[][i]表示从顶点vi到顶点vj长度为n的路径有条数

在这里插入图片描述

2.邻接表法

邻接表法为每一个顶点建立一个单链表存放与它相邻的边
顶点表
采用顺序存储,每个数组元素存放顶点的数据和边表的头指针
边表(出边表)
采用链式存储,单链表中存放与一个顶点相邻的所有边,一个链表结点表示一条从该顶点到链表结点顶点的边
在这里插入图片描述

2.1有向图边表

在这里插入图片描述

2.2无向图边表

在这里插入图片描述

#define MaxvertexNum 100
typedef struct ArcNode{//边表顶点
int adjvex;
struct ArcNode *next;
/ / infoType info;权重
}ArcNode;
typedef struct VNode {
vertexType data; //数据
ArcNode *first;//边表头指针
}VNoode ,AdjList[MaxvertexNum];//顶点表
typedef struct{
AdjList vetices;//邻接表
int vexnum, arcnum;//顶点数/边数
}ALGraph;

在这里插入图片描述

邻接表更加适用于稀疏图
若G为无向图,则结点的度为该结点边表的长度
若G为有向图,则结点的出度为该结点边表的长度,计算入度则要遍历整个邻接表
邻接表不唯一,边表结点的顺序根据算法和输入的不同可能会不同

在这里插入图片描述
在这里插入图片描述

3.十字链表

十字链表有向图的一种链式存储结构
在这里插入图片描述
data:数据域, firstarc :指向边表的头指针
在这里插入图片描述

adjvex
nextarc:下一个边表的指针
在这里插入图片描述

在这里插入图片描述
firstin\firstout:出边和入边单链表的头指针
tailvex\headvex :该弧弧弧头和弧尾端点
hlink/tlink弧头/尾相同的下一个结点指针
info:权值
在这里插入图片描述

#define MaxvertexNum 100
typedef struct ArcNode {
int tailvex, headvex;
struct ArcNode *hlink,*tlink;
/ /InfoType info;
}ArcNode;
typedef struct Vode {//顶点表
vertexType data;
ArcNode *firstin,*firstout;
}VNode;
typedef struct{//十字链表
vNode xlist[MaxvertexNum];
int vexnum,arcnum;//顶点数量 边的数量
}GLGraph;

4.临界多重表

邻接多重表无向图的一种链式存储结构
邻接表
在这里插入图片描述
操作效率低
在这里插入图片描述

firstedge:边表单链表的指针
ivex:该边表第一个端点
ilink:与该端点相邻的下一个边表的指针
jvex:第二个端点
jlink:第二个端点相邻的下一个边表的指针
info:权值
mark:标记
在这里插入图片描述

define MaxvertexNum 100
typedef struct ArcNode{//边表
int ivex, jvex;
struct ArcNode *ilink,*jlink;
/ /InfoType info;
/ /bool mark;
)ArcNode;
typedef struct VNode{//顶点表结构体
vertexType data;
ArcNode *firstedge ;
vNode;
typedef struct{//临接多重表
vNode adjmulist[MaxvertexNum];
int vexnum, arcnum;
}AMLGraph;

十字链表与临界多重表

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sf9090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值