1. 邻接矩阵表示是最简单的,可以用matlab实现dij算法
2.邻接表是最常用的(邻接表可以看成一种广义线性表)
2.1 每个顶点vi建立一个单链表(顶点的编号是在图的生成过程中就确定了),每个链表有一个表头节点,有数据域和firstarc域(指向第一个相连的结点),表头结点顺序存储便于随机访问
2.2 每个顶点的链表存放与该顶点相连的边
2.3 每个node有3个域,adjvex指示与顶点vi邻接的点在图中的位置,nextarc指示下一条(边或者弧)的节点,数据域存储相关数据。
#define Max_Vertex_num 20
typedef struct ArcNode //存储边的结构
{
int adjvex; // 该弧所指向的顶点的位置
struct ArcNode* nextarc; // 指向下一条弧的指针
InforType *info;
}
typedef struct VNode // 存储顶点的结构
{
VertexType data;// 顶点信息
ArcNode *firstArc; // 指向
}
十字链表中十字cross的由来:
横向是边的链表,纵向也是边的链表
横向链表上边的共同特征是这些边的源头顶点都相同
纵向链表上边地共同特征是这些边地目的顶点都相同
邻接多重表的由来:
邻接表(DG或者UDG)是顶点随机存储即存储成数组,同一个点对应的边串成链表
十字链表用来表示DG,改进是同一个节点的出边和入边分别串成链表
邻接多重表用来表示UDG,显然也要改进,而且是在十字链表的基础上改进,改进的方法是改变边的struct的存储,即增加域,vi和vj表示该边的两个点。和十字链表一样,也有两个边的node的指针域来向vi相连的所有边的链表和vj相连的所有边的链表。