📅  最后修改于: 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; //指向起始点的顶点结点
};
正交链表较传统的邻接表有以下优点:
分别用两个链表表示顶点和边,可有效地避免无意义的结点之间的链接,从而避免了很多无意义的遍历操作。
正交链表可以方便地创建新的边或顶点,只需要修改需要更改的指针即可,无需遍历整个链表,
正交链表可以很容易地支持图的多种操作,如查找指定边、删除指定顶点(以及与之相关的边)等。
正交链表主要应用在图的遍历和拓扑排序等算法实现。另外,由于它对顶点和边进行了分离,因此也可用于存储稀疏矩阵和三元组等数据结构。