#include<stdio.h>#include<stdlib.h>#define MAXVEX 9999typedef char VertexType; //顶点类型自定义typedef int EdgeType; //边类型自定义typedef struct EdgeNode{ //边表结点 int data; //邻接点域,储存顶点对应下标 EdgeType wight; //用于储存权值 struct EdgeNode*next;//链域,用于指向下一个邻接结点}EdgeNode;typedef struct VertexNode{ //顶点结点 VertexType data;//顶点域,储存顶点信息 EdgeNode*firstedge;//表头指针域}VertexNode,AdjList[MAXVEX];typedef struct { AdjList adjlist; int numVertexes,numEdges; //图中当前顶点和边数}GraphAdjList;//建立邻接表的结构void CreatALGraph(GraphAdjList *g,int c){ int i,j,k; EdgeNode*e; printf("输入顶点数和边数:\n"); scanf("%d%d",&g->numVertexes,&g->numEdges);//输入顶点数和边数 getchar(); printf("依次输入顶点信息:\n"); for(i = 0;i < g->numVertexes;i++) { scanf("%c",&g->adjlist[i].data); g->adjlist[i].firstedge = NULL; //指针域置空 } for(k = 0;k < g->numEdges;k++) //建立边表 { printf("输入边(vi,vj)上的顶点序号:\n"); scanf("%d%d",&i,&j); e = (EdgeNode*)malloc(sizeof(EdgeNode));//为边邻接点申请空间 if(e!=NULL){ e->data = i; e->next = g->adjlist[j].firstedge; g->adjlist[j].firstedge = e; if(c == 0) { e = (EdgeNode*)malloc(sizeof(EdgeNode)); if(e!=NULL){ e -> data = j; e ->next = g->adjlist[i].firstedge; g->adjlist[i].firstedge = e; } } } }}int main(){ GraphAdjList g; int c = 0;//自定义,如果c = 0,即为无向图 CreatALGraph(&g,c); return 0;}