邻接表(图的一种链式存储结构)
一维数组存储顶点和和其第一个邻接点的指针 单链表存储顶点的所有邻接点 arc:弧(有向图中的边) edge:边(无向图中的边) vertex:顶点 adjacent:邻接 图的邻接表存储表示
#define MVNum 100
typedef struct ArcNode{
int adjvex;
struct ArcNode *nextarc;
OtherInfo info;
}ArcNode;
typedef struct VNode{
VerTexType data;
ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
1.无向图的邻接表结构
Status CreateUDG(ALGraph &G){
cin >> G.vexnum >> G.arcnum;
for(i=0; i<G.vexnum; ++i){
cin >> G.vertices[i].data;
G.vertices[i].firstarc=NULL;
}
for(k=0; k<G.arcnum; ++k){
cin >> v1 >> v2;
i = LocateVex(G,v1);
j = LocateVex(G,v2);
p1 = new ArcNode;
p1->adjvex = j;
p1->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc = p1;
p2 = new ArcNode;
p2->adjvex = i;
p2->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = p2;
}
return OK;
}
2.有向图的邻接表结构
邻接表可以得到每个顶点的出度
逆邻接表可以得到每个顶点的入度
3.无向网(带权值的无向图)的邻接表结构
4.有向网(带权值的有向图)的邻接表结构
|