链式前向星是一种用于存储图的数据结构,一般认为是由Jason911发明的。链式前向星采用了邻接表的思想,本质上就是用链表实现的邻接表。可以使用数组模拟链表,定义head,to,nxt,edge数组,其中长度为n的head数组表示从每个节点出发的第一条边在to和edge数组中的位置,长度为m的to和edge是一一对应的,分别记录每条边的终点与边权(对于无权图,edge数组可省略),长度也为m的nxt数组模拟了链表指针,表示从相同节点出发的下一条边在to和edge数组中的位置。因此,链式前向星的空间复杂度为。
邻接矩阵比链式前向星好写,链式前向星比邻接表好写。
邻接矩阵比邻接表效率高,邻接表比链式前向星效率高。
邻接矩阵空间复杂度为,过于高;邻接表的空间复杂度与链式前向星差不多。
邻接矩阵扩展性极差,应用范围不广,邻接表和链式前向星扩展性较好。
相较而言,链式前向星是一个比较中庸的数据结构。虽说链式前向星还未普及开来,但它绝对是一种优秀的数据结构。
C++代码实现: