谈一谈图都有哪些存储方式?
- 邻接矩阵
对于无向图来说,是对称的
- 邻接表
一个数组里面存储顶点所指向的下一个节点链表
3.十字链表
十字链表是二维的,链表的元素同时链接左右水平邻结点与上下垂直邻结点。
这是十字链表节点元素的定义
struct OLNod{
int i ; //该非零元的行下标;
int j ; //该非零元 的列下标;
int value ; //该非零元的数值;
struct OLNod *right ,*down ;//该非零元所在的行表和列表的后继链域;
};
struct CrossL{
OLNod **rhead, **sead;
//十字链表的行头指针和列头指针; 定义为指向指针的指针;
int row; //稀疏矩阵的行数;
int col; //稀疏矩阵的列数;
int num; //稀疏矩阵的非零个数;
};
4.邻接多重表
邻接多重表适用于无向图存储。
有两个链表组成,左边的是该顶点相关的信息如顶点名称
右边的是表示边界点
mark表示这条边是否被访问过
ivex和jvex为该边依附的两个顶点在图中的位置,如(vi,vj)
ilink指向下一条依附于顶点ivex的边 jlink指向下一条依附于顶点jvex的边
info是改边的信息