还是插入一段代码来解释邻接表的建立过程。
//自己建立一个邻接表
//边表结点
typedef struct {
int adjvex;//该边的头结点
int weight;//权值
EdgeNode *next;//该边尾结点的下一条边
}EdgeNode;
//顶点结点
typedef struct {
int data;//顶点结点的数据
EdgeNode *first;//顶点结点的边表头指针
}VertexNode,Adjlist[10000];
//图结构体
typedef struct {
Adjlist adjlist;//顶点数组
int NumVertex,NumEdge;//顶点个数和边的个数
}GraAdj;
void create(GraAdj &g)// &符更加方便
{
int m,n;
EdgeNode *e,*p;
cin>>g.NumVertex>>g.NumEdge;//输入边的数量和结点的数量
//建立顶点结点数组
for(int i-0;i<g.NumVertex;i++){
cin>>g.adjlist[i].data;
g.adjlist[i].first=NULL;
}
//建立边表
for(int i=0;i<g.NumEdge;i++){
cin>>m>>n;//边的尾 ,头指针
//建立边结点
e=(EdgeNode*)malloc(sizeof(EdgeNode));
e.adjvex=n;
e.next=NULL;
cin>>e.weight;
//头插法建立边表
if(g.adjlist[m].first==NULL){
p=g.adjlist[m].first=e;
}else {
p=p->next=e;
}
}
}
心路历程:以一个数组存放所有顶点。
每个顶点有一个链表,链表里结点存放的是:和该顶点有关的所有边的权值,该边的头结点编号
将以上封装在一个结构体里面!