6.4.1 十字链表
对于有向图来说,使用邻接表来存储是有缺点的,如果要求有向图的结点的度是比较困难的,邻接表只是方便求出度,但不方便求入度,而逆邻接表方便求入度,不方便求出度。所以要求结点的度,最好就是将邻接表和逆邻接表结合起来,这就是十字链表。
十字链表(Orthogonal List)是有向图的另一种链式存储结构,也可以看成是将有向图的邻接表和逆邻接表结合起来的一种链表。有向图的每一条弧对应十字链表中的一个弧顶点,同时有向图中的每个顶点在十字链表中对应有一个结点,叫做顶点结点。
顶点结构:
firstin:表示入度边头指针。
firstout:表示出度边头指针。
弧表结点结构:
tailvex:表示弧起点在顶点表中的下标
headvex:表示弧终点在顶点表中的下表
hlink:表示入度边表指针域,指向终点相同的下一条边
tlink:表示出度边表指针域,指向起点相同的下一条边
6.4.2 邻接多种表
无向图的邻接表中每条边都会被存储两遍,如果对边进行删除或者插入等操作,就要对两个边进行操作,比较麻烦。为了提高无向图的操作,就引入了邻接多重表的存储结构。
顶点结点结构:
firstedge:指针域,指向顶点的第一条边。
边表结点结构:
mark:标志域,标志这条边是否已经被遍历过。
ivex和jvex:该边所依附的两个顶点在在表头数组中的位置。
ilink:指向依附ivex依附的下一条边。
jlink:指向依附jvex依附的下一条边。
info: