参照严蔚敏老师的《数据结构》一书,第7章实现
图结构的邻接表实现方式
表节点:
邻接点域(adjvex),链域(nextarc),数据域(info)。
头结点:
顶点信息(data),链域(firstarc)。
其中,表头节点通常以顺序结构的形式存储,以便于随机访问任一顶点。
下面是具体的实现:
#ifndef GRAPHMAT_H
#define GRAPHMAT_H
#include <iostream>
using namespace std;
//-----图的邻接表存储表示-----//
#define MAX_VERTEX_NUM 20
typedef struct ArcNode{
ArcNode(int a, int w) :adjvex(a), weight(w), nextarc(NULL){}
ArcNode() :nextarc(NULL){}
int adjvex; //该弧所指向的顶点的位置
int weight; //该弧相关的权值信息
ArcNode *nextarc; //指向下一条弧的指针
}ArcNode;
typedef struct VNode{
VNode() :date(0), firstarc(NULL){}
int date; //顶点信息
ArcNode *firstarc; //指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
class Graph
{
public:
Graph();
~Graph();
private:
AdjList vertices; //图的邻接表
int vexnum, arcnum;