#define MaxVerNum 100 /*最大顶点数为100*/ |
typedef struct node /*边表结点*/ |
{ |
int adjvex; /*邻接点域*/ |
struct node * next; /*指向下一个邻接点的指针域*/ |
/*若要表示边上信息,则应增加一个数据域info*/ |
} EdgeNode; |
typedef struct vnode /*顶点表结点*/ |
{ |
VertexType vertex; /*顶点域*/ |
EdgeNode * firstedge; /*边表头指针*/ |
} VertexNode; |
typedef VertexNode AdjList[MaxVertexNum]; /*AdjList 是邻接表类型*/ |
typedef struct |
{ |
AdjList adjlist; /*邻接表*/ |
int n,e; /*顶点数和边数*/ |
} ALGraph; /*ALGraph 是以邻接表方式存储的图类型*/ |
建立一个有向图的邻接表存储的算法如下: |
void CreateALGraph ( ALGraph *G ) |
{ /*建立有向图的邻接表存储*/ |
int i,j,k; |
EdgeNode * s; |
printf ( "请输入顶点数和边数(输入格式为:顶点数,边数):\n" ); |
scanf ( "%d,%d" ,& ( G->n ),& ( G->e ) ); /*读入顶点数和边数*/ |
printf ( "请输入顶点信息(输入格式为:顶点号<CR>):\n" ); |
for ( i=0; i<G->n; i++ ) /*建立有n 个顶点的顶点表*/ |
{ |
scanf ( "\n%c" ,& ( G->adjlist[i].vertex ) ); /*读入顶点信息*/ |
G->adjlist[i].firstedge=NULL; /*顶点的边表头指针设为空*/ |
} |
printf ( "请输入边的信息(输入格式为:i,j):\n" ); |
for ( k=0; k<G->e; k++ ) /*建立边表*/ |
{ |
scanf ( "\n%d,%d" ,&i,&j ); /*读入边<Vi,Vj>的顶点对应序号*/ |
s= ( EdgeNode* ) malloc ( sizeof ( EdgeNode ) ); /*生成新边表结点s*/ |
s->adjvex=j; /*邻接点序号为j*/ |
s->next=G->adjlist[i].firstedge; /*将新边表结点s 插入到顶点Vi 的边表头部*/ |
G->adjlist[i].firstedge=s; |
} |
} /*CreateALGraph*/ |