📜  正交链表(1)

📅  最后修改于: 2023-12-03 15:40:38.196000             🧑  作者: Mango

正交链表简介

正交链表(Orthogonal List)是一种特殊的链表结构,常用于图的表示和操作。它由两个单向链表组成,分别表示顶点和边,实现了边和顶点之间的分离,并支持高效的遍历和修改操作。

结构定义

正交链表由两个链表组成,分别是顶点链表和边链表。

顶点链表

顶点链表由表示顶点信息的结点构成,每个结点包含一个顶点信息和两个指针域,一个指向顶点的第一条边,另一个指向下一个顶点。

struct vertexNode{
    int vertex;             //顶点信息
    edgeNode *firstEdge;    //指向第一条与此顶点相连的边
    vertexNode *nextNode;   //指向下一个顶点
};
边链表

边链表由表示边信息的结点构成,每个结点包含两个指针域,一个指向起始点所在的顶点结点,另一个指向终点所在的顶点结点,且各自记录所在的邻接表的边结点和顶点结点。

struct edgeNode{
    int weight;             //边权值
    edgeNode *headLink;     //指向起始点所在的顶点结点的下一条边
    edgeNode *tailLink;     //指向终点所在的顶点结点的下一条边
    vertexNode *tailNode;   //指向终点的顶点结点
    vertexNode *headNode;   //指向起始点的顶点结点
};
优点

正交链表较传统的邻接表有以下优点:

  • 分别用两个链表表示顶点和边,可有效地避免无意义的结点之间的链接,从而避免了很多无意义的遍历操作。

  • 正交链表可以方便地创建新的边或顶点,只需要修改需要更改的指针即可,无需遍历整个链表,

  • 正交链表可以很容易地支持图的多种操作,如查找指定边、删除指定顶点(以及与之相关的边)等。

应用场景

正交链表主要应用在图的遍历和拓扑排序等算法实现。另外,由于它对顶点和边进行了分离,因此也可用于存储稀疏矩阵和三元组等数据结构。

参考资料