您的位置:首页 > 理论基础 > 数据结构算法

图的存储结构

2016-04-01 15:10 337 查看
1、邻接矩阵。使用二位数组存储。

2、邻接表。使用链表存储。每个顶点拥有自己的链表,链表存储该顶点 的邻接点。如果是有向图,链表节点个数表示该顶点的出度。

3、逆邻接表。使用链表存储。通常针对有向图,与邻接表相反,链表节点个数表示该顶点的入度。

4、十字链表,邻接表与逆邻接表的结合。适用于有向图/稀疏矩阵,方便求顶点的出度和入度。有点节点、边节点,结构体定义如下:

struct VNode
{
int i; // 点索引
VNode *olink, *ilink; // 出度边,入度边指针
}

struct ENode
{
int i, j; // 边的起点终点
ENode *right, *down; // 同一行,同一列指针
int weight; // 权重
int index; // 边索引号
}


5、邻接多重表。适用于无向图,需要删除边的情况。可以用来求点的度。类比:十字链表是有向图的邻接多重表。邻接多重表不唯一。点节点、边节点结构体定义:

struct VNode
{
int i; // 点索引
VNode *link; // 指向第一条边
}

struct ENode
{
int i, j; // 点索引
ENode *ivex, *jvex; // i,j点分别邻接的其它边
int weight; // 权
int index; // 边索引
}


6、边集数组。通常适用于边的条数小于点的个数时使用。使用两个数组,数组1存储点,int a[3] = {0, 1, 2}; 数组2存储边结构,结构体定义:

struct ENode
{
int index; // 边索引
int start, end; // 起点终点
int weight;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息