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

图的存储结构

    • 1.邻接矩阵
      • 1.1有向图
      • 1.2无向图
    • 2.邻接表法
      • 2.1有向图边表
      • 2.2无向图边表
    • 3.十字链表
    • 4.临界多重表
    • 十字链表与临界多重表

1.邻接矩阵

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

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

数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第2张图片
在这里插入图片描述

1.1有向图

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

1.2无向图

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

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

数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第7张图片
·邻接矩阵法的空间复杂为O(n2),适用于稠密图
·无向图的邻接矩阵为对称矩阵
·无向图中第i行(或第i列)非0元素(非正无穷)的个数为第i个顶点的度;
有向图中第i行(第列)非0元素(非正无穷)的个数为第i个顶点的出度(入度)

数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第8张图片
★A[][i]表示从顶点vi到顶点vj长度为n的路径有条数

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

2.邻接表法

邻接表法为每一个顶点建立一个单链表存放与它相邻的边
顶点表
采用顺序存储,每个数组元素存放顶点的数据和边表的头指针
边表(出边表)
采用链式存储,单链表中存放与一个顶点相邻的所有边,一个链表结点表示一条从该顶点到链表结点顶点的边
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第10张图片

2.1有向图边表

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

2.2无向图边表

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

#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;

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

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

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

3.十字链表

十字链表有向图的一种链式存储结构
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第16张图片
data:数据域, firstarc :指向边表的头指针
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第17张图片

adjvex
nextarc:下一个边表的指针
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第18张图片

在这里插入图片描述
firstin\firstout:出边和入边单链表的头指针
tailvex\headvex :该弧弧弧头和弧尾端点
hlink/tlink弧头/尾相同的下一个结点指针
info:权值
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第19张图片

#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.临界多重表

邻接多重表无向图的一种链式存储结构
邻接表
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第20张图片
操作效率低
在这里插入图片描述

firstedge:边表单链表的指针
ivex:该边表第一个端点
ilink:与该端点相邻的下一个边表的指针
jvex:第二个端点
jlink:第二个端点相邻的下一个边表的指针
info:权值
mark:标记
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念_第21张图片

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;

十字链表与临界多重表

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

你可能感兴趣的:(C语言,链表,数据结构,算法)