简单入门邻接表

初学邻接表会觉得邻接表很难记忆,尤其是其数据结构部分,下面我们简单介绍一下邻接表。

1. 大体的认识

首先给出一个有向图和它的邻接表。
在这里插入图片描述

给出其数据结构的表示

//  边表的结构 
typedef struct ArcNode
{
    
    
//  存储该顶点对应的下标 
  int adjvex;
//  指向的下一跳指针
  struct ArcNode *nextarc; 
}ArcNode;

//  顶点表 
typedef struct
{
    
    
  // 顶点信息 
  int data;
//  指向的第一条边的指针 
  ArcNode *firstArc; 
}VNode;

//  顶点表和边表组成邻接表
typedef struct
{
    
    
//  邻接表 
  VNode adjlist[maxSize];
//  顶点数和边数 
  int n,e; 
}AGraph;

2. 细分来看看

可以看到数据结构相对来说比较庞杂,不好记忆,初学也不好理解。下面来详细分析以下其结构
在这里插入图片描述
上图是一个邻接表的图示。
其中红色椭圆部分就是数据结构中的顶点表,它表示的是有向图或者无向图中的顶点 vi

其中红色矩形部分就是边表,其表示两个顶点之间存在的边的关系,就是这两个点通过一条边连在了一起。如 v0 指向 3 (3 表示在顶点表中下标为 3 的元素,顶点表是一个数组,后面讲)而 3 在顶点表中代表 v3(关注左侧的数组下标,这里数组是竖着放的

最后,这两个表组成的最外面的蓝色边框就称为邻接表

这个时候你可以在回顾以下给出的数据结构的代码,重新理解以下。

3. 再细一点

下面我们来看看每个小的数据结构各自的含义

边表结构
在这里插入图片描述
在边表的结构中,adjvex 表示的是顶点的下标(我们说过,顶点表是用数组实现的,后面会再讲)

而 *nextarc 是指向下一个顶点的指针,就是图中的那个黑色箭头

最后这个边表结果我们通常命名为 ArcNode,Arc 就是弧,边的意思(当然名字随意取)

顶点表结构
在这里插入图片描述
data 代表的就是有向图或者无向图的顶点。

*firstArc 表示顶点在数据结构中指向的第一条边

最后,VNode 中 v 是 vertex 顶点的缩写。

邻接表结构
在这里插入图片描述

最后,adjlist (adj 是 adjacent,表示毗邻,邻近的意思)我们看到是一个数组,这就是顶点数组,我们通过邻接表(AGraph)找到顶点数组,通过顶点数组的 *firstArc 就可以访问任何的顶点(即遍历整个图)了。

以上便是对邻接表数据结构的简单入门。

猜你喜欢

转载自blog.csdn.net/qq_34902437/article/details/101613170