图--存储结构(十字链表)

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

处理方式

    在邻接表中的顶点表中的节点记录两张单链表:入度和出度

    在每一张单链表中的节点中分别记录起始点在顶点表中的位置及其对应的始终相同的下一条边,如果存在权值,则使用weight记录

为什么使用

    邻接表解决了空间浪费,但是在有向图中对于出度和入度无法同时清晰展示

适用

    有向图

图示

        从图中可以看出,A的出度是B的入度,C的入度是A的出度,故调整后的图如下

JavaScript代码实现

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

(firstIn为入度表的头指针,firstOut为出度表的头指针)
(startI为当前边的起点,endI为边的终点,nextIn指向同一终点的另一节点,有多条则一直衔接,nextOut则为同一起点)

         初始化顶点表,其出度和入度表的头指针均为null

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

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

            2-创建节点,记录两节点的位置,由于a的出是b的入且在第二步时,b的头结点仍为上一次的节点,故取b的firstIn

            3-使用头插法,将新节点插入到表头,此时新节点已经保留过上一个节点

你可能感兴趣的:(图--存储结构(十字链表))