1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #define MAXVEX 9999
    4. typedef char VertexType; //顶点类型自定义
    5. typedef int EdgeType; //边类型自定义
    6. typedef struct EdgeNode{ //边表结点
    7. int data; //邻接点域,储存顶点对应下标
    8. EdgeType wight; //用于储存权值
    9. struct EdgeNode*next;//链域,用于指向下一个邻接结点
    10. }EdgeNode;
    11. typedef struct VertexNode{ //顶点结点
    12. VertexType data;//顶点域,储存顶点信息
    13. EdgeNode*firstedge;//表头指针域
    14. }VertexNode,AdjList[MAXVEX];
    15. typedef struct {
    16. AdjList adjlist;
    17. int numVertexes,numEdges; //图中当前顶点和边数
    18. }GraphAdjList;
    19. //建立邻接表的结构
    20. void CreatALGraph(GraphAdjList *g,int c){
    21. int i,j,k;
    22. EdgeNode*e;
    23. printf("输入顶点数和边数:\n");
    24. scanf("%d%d",&g->numVertexes,&g->numEdges);//输入顶点数和边数
    25. getchar();
    26. printf("依次输入顶点信息:\n");
    27. for(i = 0;i < g->numVertexes;i++)
    28. {
    29. scanf("%c",&g->adjlist[i].data);
    30. g->adjlist[i].firstedge = NULL; //指针域置空
    31. }
    32. for(k = 0;k < g->numEdges;k++) //建立边表
    33. {
    34. printf("输入边(vi,vj)上的顶点序号:\n");
    35. scanf("%d%d",&i,&j);
    36. e = (EdgeNode*)malloc(sizeof(EdgeNode));//为边邻接点申请空间
    37. if(e!=NULL){
    38. e->data = i;
    39. e->next = g->adjlist[j].firstedge;
    40. g->adjlist[j].firstedge = e;
    41. if(c == 0)
    42. {
    43. e = (EdgeNode*)malloc(sizeof(EdgeNode));
    44. if(e!=NULL){
    45. e -> data = j;
    46. e ->next = g->adjlist[i].firstedge;
    47. g->adjlist[i].firstedge = e;
    48. }
    49. }
    50. }
    51. }
    52. }
    53. int main(){
    54. GraphAdjList g;
    55. int c = 0;//自定义,如果c = 0,即为无向图
    56. CreatALGraph(&g,c);
    57. return 0;
    58. }