#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 9999
typedef 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;
}