7.2图的存储结构

基于邻接矩阵存储的图的最短路径问题(Dijkstra算法) #include using namespace std; #define MAXNODE 500//最大顶点个数 #define Inf 65535//无穷大 typedef int vertype; struct VerNode { vertype vertex;//// 顶点信息,可以是字母表示,也可以是数字表示 //.....;//// 和顶点相关的其它信息,如顶点的度 阅读详情

7.2图的存储结构

本讲介绍 4 种较常用的存储表示法:①邻接矩阵表示法;②邻接表;③邻接 多重表;④十字链表。由于每种方法各有利弊,因此可以根据实际应用问题来选择合适的存储表示方法。

①邻接矩阵表示法

图的邻接矩阵表示法(Adjacency Matrix)也称作数组表示法。它采用两个数 组来表示图:一个是用于存储顶点信息的一维数组,另一个是用于存储图中顶点 之间关联关系的二维数组,这个关联关系数组被称为邻接矩阵。

若 G 是一具有 n 个顶点的无权图,G 的邻接矩阵是具有如下性质的 n×n 矩 阵 A:
在这里插入图片描述
若图 G 是一个有 n 个顶点的网,则它的邻接矩阵是具有如下性质的 n×n 矩 阵 A
在这里插入图片描述
例如:下图就是一个有向网及其邻接矩阵的示例。
在这里插入图片描述
邻接矩阵表示法的 C 语言描述如下:

#define  MAX_VERTEX_NUM   20             /*最多顶点个数*/ 
#define  INFINITY   32768                     /*表示极大值,即∞*/ 
 
/* 图的种类:DG 表示有向图, DN 表示有向网, UDG 表示无向图, UDN 表示无向网 */ 
typedef  enum
{DG, DN, UDG, UDN}  GraphKind;   
typedef  char   VertexData;                     /*假设顶点数据为字符型*/ 
typedef  struct  ArcNode{  
	AdjType    adj;          /* 对于无权图,用 1 或 0 表示是否相邻; 对带权图,则为权值类型 */  
	OtherInfo   info; 
}ArcNode; 
typedef  struct{    
	VertexData  vertex[MAX_VERTEX_NUM];                        /*顶点向 量*/    
	ArcNode  arcs [MAX_VERTEX_NUM][MAX_VERTEX_NUM];   /*邻接矩阵*/    
	int  vexnum,  arcnum;          /*图的顶点数和弧数*/    
	GraphKind  kind;                      /*图的种类标志*/ 
}AdjMatrix;      /*(Adjacency Matrix Graph)*/ 

邻接矩阵法的特点如下:

  • 存储空间: 对于无向图而言,它的邻接矩阵是对称矩阵(因为若(vi,vj) ∈E(G),则(vj,vi)∈E(G)),因此可以采用特殊矩阵的压缩存储法, 即只存储其下三角即可,这样,一个具有 n 个顶点的无向图 G,它的邻 接矩阵需要 n(n-1)/2 个存储空间即可。但对于有向图而言 ,其中的 弧是有方向的,即若<vi,vj>∈E(G),不一定有<vj,vi>∈E(G),因此, 有向图的邻接矩阵不一定是对称矩阵,对于有向图的邻接矩阵的存储则 需要 n2个存储空间。
  • 便于运算: 采用邻接矩阵表示法,便于判定图中任意两个顶点之间是否 有边相连,即根据 A[i,j]=0 或 1 来判断。另外还便于求得各个顶点的度。 对于无向图而言,其邻接矩阵第 i 行元素之和就是图中第 i 个顶点的度:
    在这里插入图片描述
    采用邻接矩阵存储法表示图,很便于实现图的一些基本操作,如实现访问图 G 中 V 顶点第一个邻接点的函数 FirstAdjVertex(G,v)可按如下步骤实现:
    FirstAdjVertex(G,v):
  • ⑴ 首先,由 LocateVertex(G,v)找到 v 在图中的位置,即 v 在一维数组 vertex 中的序号 i。
  • ⑵ 二维数组 arcs 中第 i 行上第一个 adj 域非零的分量所在的列号 j,便是 v 的第一个邻接点在图 G 中的位置。
  • ⑶ 取出一维数组 vertex[j]中的数据信息,即与顶点 v 邻接的第一个邻接点 的信息。 对于稀疏图而言,不适于用邻接矩阵来存储,因为这样会造成存储空间的浪费。

用邻接矩阵法创建有向网的算法如下:
【算法描述】

int LocateVertex(AdjMatrix * G, VertexData v)    /*求顶点位置函数*/    
{ 
	int j=Error,k;      
	for(k=0;k<G->vexnum;k++)    
		if(G->vertex[k]==v)     
		{ 
			j=k; 
			break; 
		}      
	return(j);    
} 
int CreateDN(AdjMatrix *G)  /*创建一个有向网*/   
{ 
	int i,j,k,weight; 
	VertexData v1,v2;      
	scanf("%d,%d",&G->arcnum,&G->vexnum); /*输入图的顶点数和弧数*/      
	for(i=0;i<G->vexnum;i++)       /*初始化邻接矩阵*/        
		for(j=0;j<G->vexnum;j++)         
			G->arcs[i][j].adj=INFINITY;      
	for(i=0;i<G->vexnum;i++)         
		scanf("%c",&G->vertex[i]);  /* 输入图的顶点*/      
	for(k=0;k<G->arcnum;k++)     
	{ 
		scanf("%c,%c,%d",&v1,&v2,&weight);/*输入一条弧的两个顶点及权 值*/      
		i=LocateVex_M(G,v1);       
		j=LocateVex_M(G,v2);        
		G->arcs[i][j].adj=weight;  /*建立弧*/  
	}       
	return(Ok);  
}   

该算法的时间复杂度为 O(n²+e×n),其中 O(n²)时间耗费在对二维数组 arcs 的每个分量的 arj 域初始化赋值上。O(e×n)的时间耗费在有向网中边权的赋值上。

②邻接表表示法

图的邻接矩阵表示法(即图的数组表示法)虽然有其自身的优点,但对于稀 疏图来讲,用邻接矩阵的表示方法会造成存储空间的很大浪费。邻接表 (Adjacency List)表示法实际上是图的一种链式存储结构。它克服了邻接矩阵的 弊病,基本思想是只存有关联的信息,对于图中存在的边信息则存储,而不相邻 接的顶点则不保留信息。在邻接表中,对图中的每个顶点建立一个带头结点的边 链表,如第 i 个单链表中的结点则表示依附于顶点 vi 的边(若是有向图,则表示 以 vi 为弧尾的弧)。每个边链表的头结点又构成一个表头结点表。
这样,一个 n 个顶点的图的邻接表表示由表头结点表与边表两部分构成:

(1) 表头结点表

由所有表头结点以顺序结构(向量)的形式存储,以 便可以随机访问任一顶点的边链表。表头结点的结构如下图(a)所示。 表头结点由两部分构成,其中**数据域(vexdata)**用于存储顶点的名或其 它有关信息;**链域(firstarc)**用于指向链表中第一个顶点(即与顶点 vi 邻接的第一个邻接点)。

(2) 边表:

由表示图中顶点间邻接关系的 n 个边链表组成。边链表中结点的结构如下图(b)所示,它由三部分组成,其中邻接点域(adjvex) 用于存放与顶点 vi相邻接的顶点在图中的位置;**链域(nextarc)**用于指 向与顶点 vi 相关联的下一条边或弧的结点;**数据域(info)**用于存放与 边或弧相关的信息(如赋权图中每条边或弧的权值等)。
在这里插入图片描述
如下图所示分别是图 G1、G2 邻接表表示示例,其中边表中顶点无顺序要求。在这里插入图片描述
邻接表存储结构的形式化说明如下:

#define  MAX_VERTEX_NUM   20             /*最多顶点个数*/ 
typedef  enum{DG, DN, UDG, UDN}  GraphKind;  /*图的种类*/ 
typedef  struct  ArcNode
{ 
	int  adjvex;     /*该弧指向顶点的位置*/     
	struct  ArcNode   *nextarc;    /*指向下一条弧的指针*/     
	OtherInfo   info;       /*与该弧相关的信息*/ 
}ArcNode; 
typedef  struct  VertexNode
{   
	VertexData    data;        /*顶点数据*/     
	ArcNode    *firstarc;    /*指向该顶点第一条弧的指针*/ 
}VertexNode; 
typedef  struct
{     
	VertexNode   vertex[MAX_VERTEX_NUM];        
	int   vexnum,arcnum;               /*图的顶点数和弧数*/     
	GraphKind   kind;                        /*图的种类标志*/ 
}AdjList;           /*基于邻接表的图(Adjacency List Graph)*/ 

■存储空间 对于有 n 个顶点,e 条边的无向图而言,若采取邻接表作为存储结构,则需 要 n 个表头结点和 2e 个表结点。很显然在边很稀疏(即 e 远小于 n(n-1)/2 时) 的情况下,用邻接表存储所需的空间要比邻接矩阵所需的 n(n-1)/2 要节省得多。

■无向图的度 在无向图的邻接表中,顶点 vi的度恰好就是第 i 个单链表上结点的个数。

■有向图的度 在有向图中,第 i 个单链表上结点的个数只是顶点 vi 的出度,只需通过表头向量表中找到第 i 个顶点的边链表的头指针,实现顺链查找即可。

如果要判定任意两个顶点(vi 和 vj)之间是否有边或弧相连,则需要搜索所有的边链表,这样比较麻烦。

要求第 i 个顶点的入度,必须遍历整个邻接表。在所有边链表中查找邻接点 域的值为 i 的结点并计数求和。由此可见,对于用邻接表方式存储的有向图,求顶点的入度并不方便,它需要扫描整个邻接表才能得到结果。

一种解决的方法是逆邻接表法,我们可以对每一顶点 vi再建立一个逆邻接表, 即对每个顶点 vi建立一个所有以顶点 vi为弧头的弧的表,有向图 G1 的逆邻接表如下图所示。这样求顶点 vi的入度即是计算逆邻接表中第 i 个顶点的边链表中结点个数。
在这里插入图片描述
实质上这需要将图中的一条弧分别在邻接表与逆邻接表各自的边链表中存 储,下面介绍十字链表法,此方法优点是一条弧只被存放一次。

③ 十字链表

十字链表(Orthogonal List)是有向图的另一种链式存储结构。可以把它看成是 将有向图的邻接表和逆邻接表结合起来形成的一种链表。有向图中的每一条弧对 应十字链表中的一个弧结点,同时有向图中的每个顶点在十字链表中对应有一个结点,叫做顶点结点。这两类结点结构如下图所示。
在这里插入图片描述
例如:有向图 G1 的十字链表表示如下图所示。若有向图是稀疏图,则它的 邻接矩阵一定是稀疏矩阵,这时该图的十字链表表示法可以看成是其邻接矩阵的 链表表示法。只是在图的十字链表表示法中,弧结点所在的链表不是循环链表且 结点之间相对位置自然形成,不一定按顶点序号有序。另外,表头结点即顶点结点,它们之间并非循环链式连接,而是顺序存储。

图的十字链表结构形式化定义如下:

#define  MAX_VERTEX_NUM   20              /*最多顶点个数*/ 
typedef  enum{DG, DN, UDG, UDN}  GraphKind;  /*图的种类*/ 
typedef  struct  ArcNode 
{  
	int  tailvex,  headvex;      
	struct  ArcNode  *hlink,  *tlink;     
}ArcNode; 
typedef struct VertexNode
{    
	VertexData   data;    /*顶点信息*/    
	ArcNode    *firstin,  *firstout;   
}VertexNode; 
typedef struct
{    
	VertexNode   vertex[MAX_VERTEX_NUM];       
	int  vexnum,  arcnum;   /*图的顶点数和弧数*/    
	GraphKind   kind;              /*图的种类*/ 
}OrthList;      /*图的十字链表表示法(Orthogonal List)*/ 

在这里插入图片描述
下面给出建立一个有向图的十字链表的算法:
【算法描述】

void  CrtOrthList(OrthList  *g) /*从终端输入 n 个顶点的信息和 e 条弧的信息,以建立一个有向图的十字链表*/ 
{ 
	scanf(“%d,%d”,&n,&e);  /*从键盘输入图的顶点个数和弧的个数*/ 
	g->vexnum = n; 
	g->arcnum = e; 
	for (i=0;i<n;i++)     
	{ 
		scanf(“%c”,&(g->vertex[i].data));     
		g->vertex[i] .firstin=NULL; 
		g->vertex[i] .firsout=NULL;    
	} 
	for (k=0;k<e;k++)    
	{ 
		scanf(“%c,%c”,&vt,&vh);     
		i=LocateVertex(g,vt); 
		j = LocateVertex(g,vh);     
		p=( ArcNode*)malloc(sizeof(ArcNode));     
		p->tailvex=I;  
		p->headvex=j;     
		p->tlink = g->vertex[i].firstout; 
		g->vertex[i].firstout =p;     
		p->hlink = g->vertex[j].firstin; 
		g->vertex[j].firstin =p; 
	} 
} /* CrtOrthList */ 

在十字链表中既能够很容易地找到以 vi 为尾的弧,也能够容易地找到以 vi 为头的弧,因此对于有向图,若采用十字链表作为存储结构,则很容易求出顶点 vi的度。此外,为有向图建立一个邻接表的算法和建立一个十字链表的算法的时 间复杂度是相同的。所以,在某些有向图的应用中,十字链表表示法更为合适。

④邻接多重表

邻接多重表(Adjacency Multi_list)是无向图的另外一种存储结构,之所以提出 邻接多重表这种存储结构是因为它能够提供更为方便的边处理信息。在无向图的邻接表表示法中,每一条边(vi,vj)在邻接表中都对应着两个结点,它们分别在第 i 个边链表 i 和第 j 个边链表中。这给图的某些边操作带来不便,如检测某条边是否被访问过,则需要同时找到表示该条边的两个结点,而这两个结点又分别在两个边链表中。邻接多重表是指将图中关于一条边的信息用一个结点来表示, 其结点结构如下图(a)所示,图中的每一个顶点也对应一个顶点结点,其结构如下图(b)所示。
在这里插入图片描述
邻接多重表的结构类型说明如下:

#define  MAX_VERTEX_NUM   20              /*最多顶点个数*/ 
typedef  struct  EdgeNode 
{ 
	int  mark,ivex,jvex; 
	struct  EdgeNode  *ilink,  *jlink; 
}EdgeNode; 
typedef struct 
{     
	VertexData  data;     
	EdgeNode  *firstedge; 
}VertexNode; 
typedef struct{     
	VertexNode  vertex[MAX_VERTEX_NUM];        
	int  vexnum,  arcnum;           /*图的顶点数和弧数*/     
	GraphKind   kind;                     /*图的种类*/ 
}AdjMultiList;         /*基于图的邻接多重表表示法(Adjacency Multi_list)*/ 

在这里插入图片描述

【数据结构】算法7.1-7.2 图的存储结构-数组表示法 #include<stdio.h> #include<string.h> #include<stdlib.h>#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2#define INFINITY 65535 //最大值∞ #define MAX_ 阅读详情

相关推荐

图的存储结构及遍历

实验项目名称:图的存储结构及遍历 实验目的及要求: 实验目的 (1)理解图的存储结构的表示和运算的C语言实现。 (2)掌握图的创建及深度遍历。 要求: (1)设计图的存储结构(边的信息用邻接矩阵存储); (2)数据元素为字符类型; (3)在实现图的创建及深度遍历。 实验原理:图结构是研究数据元素之间的多对多的关系。在这种结构中,任意两个元素之间可能存在关系。即结点之间的关系可以是任意的,图中任意元素之间都可能相关。 图的邻接矩阵表示法(Adjacency Matrix)也称作数组表示法,采用两个数组来表示图

代码演奏家 1244

【图】图的存储结构

邻接矩阵表示法

weixin_45765128的博客 456

图的存储结构和算法—创建,输出,遍历(DFS,BFS),销毁

图的存储结构邻接矩阵存储邻接表存储三级目录 邻接矩阵存储 邻接表存储 三级目录

striver的博客 5156

数据结构期末复习(前六章)

数据结构期末复习 引言 选择题 30分 共15道 应用题 类似离散数学应该 55分 算法设计题 手撕代码 15分 Ch 1-数据结构绪论 基本概念 数据的基本单位是? 数据元素 构成数据元素的不可分割最小单位是? 数据项 什么是算法? 答:算法是对特定问题求解步骤的一种描述,是指令的有限序列 算法的五大特性 输入 输出 有穷性 确定性 可行性 考察重点 数据的存储结构 顺序存储 数据元素之间的逻辑关系由元素的存储位置来表示 链接存储 数据元素之间的逻辑关系用指针来表示 线性表、树、图的特征 线

EASYGOING45的博客 1789

通讯接口应用笔记3:使用W5500实现Modbus TCP服务器

  前面我们设计实现了W5500的驱动程序,也讲解了驱动的使用方式。在最近一次的项目应用中,正好有一个使用W5500实现TCP通讯的需求,所以我们就使用该驱动程序轻松实现。这一篇中我们就来说一说基于我们W5500通讯驱动程序实现TCP通讯的过程。 1、应用需求   在本次应用中,要求实现一个基于W5500的Modbus TCP服务器。这个需求的描述虽然只有一句话,但是这个需求的内容可不简单。我们首先来分析一下这个需求的具体内容。   为了实现基于W5500的Modbus TCP服务器,我们必先须基于W550

木南创智 5500

解题报告-美团点评2017秋招笔试编程题--常见动态规划问题

晚上就要美团笔试了,在牛客上刷套美团的题练练手,四道题目全都是典型题目,经典的连题面都懒得改那种,也都不难,很基础的动态规划问题。[编程题] 大富翁游戏时间限制:1秒空间限制:32768K大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n&lt;=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。 输...

聂小白的专栏 1720

数据结构—邻接矩阵存储法代码实现

邻接矩阵法 无向图 #include<stdio.h> #define MaxVertenNum 6 //顶点数目的最大值 typedef char VertexType; //顶点的数据类型 typedef int EdgeType; //存放顶点信息 typedef struct { VertexType Vex[MaxVertenNum]; //顶点表 EdgeType Edge[MaxVertenNum][MaxVertenNum]; //邻接矩阵 int vexnum, edge

Miss Z的博客 2939

通过python下载西门子技术中心文档

本篇文章纯粹记录如何下载通过python下载西门子技术中心文档,所下载文档完全自己学习使用,非商业用途

John_09040211的博客 561

邻接矩阵存储无向图

邻接矩阵的优势: 可以快速判断两个顶点之间是否有边; 方便计算各顶点的度,无向图中:顶点i的度 = 邻接矩阵第i行(列)中的元素和;有向图中:顶点的出度 = 邻接矩阵第i行中的元素和,顶点的入度 = 邻接矩阵第i列中的元素和。 ...

qq_48988844的博客 3162

Transformer在BEV感知中的统治地位

Transformer在BEV感知中的统治地位 ,人工智能,计算机视觉,大模型,AI,本文围绕 Transformer 在 BEV 感知中的统治地位展开,介绍了 Transformer 的基础原理,如自注意力、多头注意力机制等,以及 BEV 感知的概念、任务与挑战。阐述了 Transformer 在 BEV 感知中的技术优势,包括全局建模、灵活特征融合和长距离依赖捕捉能力,还介绍了典型架构、代码示例及在自动驾驶目标检测等领域的应用案例。同时,评估了其性能,提及优化方法,并展望了与其他技术融合、端到端系统等…

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 20万+

总结目前开源的视频生成/视频编辑大模型

随着Sora的爆火,视频生成和视频编辑受到了越来越多的关注。这篇博客总结一下目前开源的视频生成和视频编辑的大模型,并分析他们各自的优缺点,以及在自己进行科研任务或者工作中应该如何选用对应的开源模型,希望能给从事这一领域研究和使用的小伙伴们帮助。

沉迷单车的追风少年 3546

数据结构7.2_图的存储结构

由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系。 即图没有顺序映像的存储结构。 另一方面,多重链表表示图是一件自然的事。它是一种最简单的链式映像结构。 即以一个由一个数据域和多个指针域组成的结点表示图中的一个顶点。 其中,数据域存储该顶点的信息,指针域存储指向其邻接点的指针。 由于各个结点的度...

weixin_34268310的博客 256

wireshark提取视频数据之RTP包中提取H264和H265

本文主要描述从wireshark包数据中提取出H264和H265裸流数据方法,裸流通过RTP封包方式发送,从抓包中直接提取视频流数据,进而进行流媒体问题定位

技术控的笔记 17万+

假设以邻接矩阵作为图的存储结构_7.2 图的存储结构(2)

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com7.2.2 邻接表表示法它的基本思想是只存有关联的信息,对于图中存在的边信息则存储,而对于不相邻接的顶点则不保留信息。在邻接表中,对图中的每个顶点建立一个带头结点的边链表,每个边链表的头结点又构成一个表头结点表。一个n个顶点的图的邻接表表示由表头结点表与边表两部分构成: (1)表头结点表:由所有表头结点以顺序结...

weixin_39664477的博客 217

SpringBoot4+Java21前后端分离架构项目脚手架

本文介绍了基于SpringBoot 4和Java 21的前后端分离项目架构方案。主要内容包括:1)采用Spring Security 7实现JWT无状态认证和RBAC权限控制;2)后端使用MyBatis-Plus简化数据库操作,前端采用Vue3+Pinia组合;3)详细的项目结构设计,推荐按业务模块分包;4)核心依赖配置和架构设计图,涵盖认证授权流程。该方案结合最新技术栈,提供了生产级的全链路实现,特别适合需要快速构建现代化Web应用的项目。

Hello, New World! 422

高通Camx功能feature分析之十:高通NCS服务之注册和启动

本文介绍了高通NCS(非相机传感器)服务的注册与启动流程。NCS通过QMI接口访问陀螺仪等传感器,为相机EIS/AEC等功能提供辅助数据。文章详细解析了服务注册时的QueryCapabilites能力查询、RegisterService注册流程,以及通过StartNCSService启动服务线程的过程。重点包括:1)AF/EIS等节点通过NCSService创建传感器对象;2)注册时需校验传感器类型和接口;3)首次注册成功后会启动NCS服务线程;4)采样率变化时需重新配置会话。通过线程池管理实现传感器数据的

1262

7.2.0 图的存储结构

从线性结构的线性关系,到树形结构的层次关系,再到现在的图结构 图结构比较复杂,图中任意两个顶点都可能存在联系。 1、图结构也无法以数据元素在存储区中的物理位置来表示元素之间的关系。即图没有顺序表的存储结构。 2、用多重链表表示图结构: 若按度数最大的顶点来设计结点结构会浪费很多存储单元; 若按每个顶点自己的度数来设计不同的结点结构会造成操作不便。 常用于表示图结构的方法有 二维数组 / 邻接矩阵 :7.2.1 二维数组 / 邻接矩阵 邻接表 :7.2.2 邻接表 十字链表:7.2.3 十字链..

engineer0的博客 151

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

7.2图的存储结构(邻接表)

7.2图的存储结构(邻接表)

IT1995的博客 6050

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

7.2图的存储结构(十字链表、邻接多重表、边集数组)

7.2图的存储结构(十字链表、邻接多重表、边集数组)

IT1995的博客 7223

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

2个表 遍历 组合_7.2 图的存储结构(2)

返回目录:Chilan Yu:《数据结构》目录链接​zhuanlan.zhihu.com7.2.2 邻接表表示法它的基本思想是只存有关联的信息,对于图中存在的边信息则存储,而对于不相邻接的顶点则不保留信息。在邻接表中,对图中的每个顶点建立一个带头结点的边链表,每个边链表的头结点又构成一个表头结点表。一个n个顶点的图的邻接表表示由表头结点表与边表两部分构成: (1)表头结点表:由所有表头结点以顺序结...

weixin_30548963的博客 99

7.2图的存储结构(邻接矩阵)

7.2图的存储结构(邻接矩阵)

IT1995的博客 1万+

图的存储结构——邻接矩阵

图的存储结构邻接矩阵表示法存储表示采用邻接矩阵表示法创建无向网用代码实现无向网 若有n个顶点,就是n*n的方阵,与边数无关 对称矩阵:从矩阵的左上角到右上角的主对角线为轴,右上角的元与左下角对应的元全都是相等的 邻接矩阵表示法 有向图、无向图的邻接矩阵表示法 如: 无向图 总结: 无向图的邻接矩阵是对称的; 顶点i的度=第i行(列)中1的个数; 特别的:完全图的邻接矩阵中,对角元素为0,其余为...

ker的博客 6159

图的存储结构与实现总结-java版

目录 图的存储结构 邻接矩阵 邻接表 两者区别 图的java实现 顶点 边 图 测试 图的存储结构 图的存储结构主要分两种,一种是邻接矩阵,一种是邻接表。 邻接矩阵 图的邻接矩阵存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。 设图G有n个顶点,则邻接矩阵是一个n*n的方阵,定义为: 看一个实例,下图...

今天吃了吗的博客 4246

【C 数据结构-图】2. 图的存储结构

例如:存储下图中的两张图时,除了存储图中各顶点本身具有的数据外,还需要使用二维数组存储任意两个顶点之间的关系。解决了邻接表不方便计算有向图顶点入度的问题。中顶点的入度和出度只需从数组中。,以表示距离无穷远,根本无法到达。可以提高无向图中操作顶点的效率。,而无法计算该顶点的入度。

普罗米修斯的博客 1124

数据结构 之 图的存储结构(十)

图的存储结构,邻接表和邻接矩阵的概念和用法

J_admin的博客 779

图的存储结构 && 图的遍历

①领接矩阵:顺序存储(一维数组存点的数据,二维数组存边的连接情况)(存储无向图、有向图)②邻接表:顺序+链式存储(顺序存点的数据,链存连接该点的边)(存储有向图、无向图)③十字链表:链式存储(存储有向图)④邻接多重表:链式存储(存储无向图)

一只小水豚 1170
上一篇: 7.1图的基本概念
下一篇: 7.3图的遍历
亓木Wilson
博客等级 码龄7年 51粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值