图--存储结构(邻接表)

    之前我们分别学习了邻接矩阵、图的基本术语,本节继续学习图的存储结构:邻接表

处理方式

    使用一维数组存储顶点信息,数组的每一个顶点由数据域data和指针域first组成,其中指针域指向单链表的头结点

    以顶点为头结点,衔接其邻接点构造单链表(无向图称为边表,有向图称为出边表)。每一个节点由adjvex和next组成(如果存在权值则增加weight域),其中adjvex标识节点在顶点表中的位置,next指向下一个邻接点

为什么使用

    由于邻接矩阵以顶点数为基础创建,因此当边数小于顶点数时存在空间浪费。这是以数组为代表的顺序存储的通病,而链式恰好用于规避这类浪费:有多少就衔接多少

适用

    无向图

图示

(框红区域表示存放顶点信息的一维数组;框黄的则代表每个顶点对应的单链表,可以看到,单链表的数据域存放的是邻接点在顶点数组中的位置而非顶点本身)

    
JavaScript实现代码

    定义顶点表和单链表的节点类型

(顶点表节点)
(链表节点)

    初始化顶点表,其指针域first初始为空

    根据边数遍历,使用头插法创建单链表

            1-找到边节点在顶点表中的位置

            2-创建节点,插入到链表表头,并替换顶点表中的头结点为当前节点

            3-无向图中还需要创建当前节点邻接的节点并重复第二步

优缺点

    缺点:有向图中,出度和入度无法周全

你可能感兴趣的:(图--存储结构(邻接表))