1、
》》 十字链表是有向图的一种链式存储结构。在十字链表中,对应于有向图中的每条弧
有一个结点,对应于每个顶点也有一个结点。这些结点的结构如下:
说明1: 弧结点
a. 尾域 tailvex : 指示弧尾在图中的位置
b. 头域 headvex : 指示弧头在图中的位置
c. 链域 hlink : 指向弧头相同的下一条域
d. 链域 tlink : 指向弧尾相同的下一条域
e. info : 指向该弧的相关信息
这样,弧头相同的弧在同一个链表上,弧尾相同的弧也在同一个链表上。
说明2:顶点结点
a. data 域:存放顶点相关的数据信息,如顶点名称
b. fitstin : 指向以该顶点为弧头的第一个弧结点
c. firstout : 指向以该顶点为弧尾的第一个弧结点
》》为有向图的十字链表表示法示例:【注意:顶点结点之间是“ 顺序存储 ”】
》》图的十字链表存储结构定义如下:
#define MaxVertexNum 100 // 图中顶点数目的最大值
typedef struct ArcNode{ // 边表结点
int tailvex , headvex; // 该弧的头尾结点
struct ArcNode *hlink , *tlink ; // 分别指向弧头相同和弧尾相同的结点
// InfoType info; // 相关信息指针
}ArcNode;
typedef struct VNode { // 顶点表结点
VertexType data; // 顶点信息
ArcNode *firsttin , *firstout ; // 指向第一条入弧和出弧
}VNode;
typedef struct{
VNode xlist[MaxVertexNum]; // 邻接表
int vexnum , arcnum ; // 图的顶点数和弧数
}GLGraph; // GLGraph 是以邻接表存储的图类型
补充1:在十字链表中,既容易找到 Vi 为尾的弧,也容易找到 Vi 为头的弧,因而容易求得顶点的出度和入度。
补充2: 图的十字链表表示不唯一的,但是一个十字链表表示确定一个图。