图这一章我一直觉得自己学的不是很好。。。这次就只放代码,不敢多说什么了。

    1. typedef char VertexType; //顶点类型应由用户定义
    2. typedef int EdgeType; //边上的权值类型应由用户定义
    3. #define MAXVEX 100
    4. typedef struct EdgeNode{ //边表结点
    5. int adjvex; //邻接点域,存储该顶点对应的下标
    6. EdgeType weight; //用于存储权值,对于非网图可以不需要
    7. struct EdgeNode *next; //链域,指向下一个邻接点
    8. }EdgeNode;
    9. typedef struct VertexNode{ //顶点表结点
    10. VertexType data; //顶点域
    11. EdgeNode *firstedge; //边表头指针
    12. }VertexNode, AdjList[MAXVEX];
    13. typedef struct{
    14. AdjList adjList;
    15. int numVertexes, numEdges; //图中当前顶点数和边数
    16. }GraphAdjList;
    17. /*头插法建立图的邻接表结构*/
    18. void CreatALGraph(GraphAdjList *G){
    19. int i, j, k;
    20. EdgeNode *e;
    21. printf("请输入顶点数和边数:");
    22. scanf("%d, %d", &G->numVertexes, &G->numEdges); //输入顶点数和边数
    23. for (i = 0; i < G->numVertexes; i++){ //读入顶点信息,建立顶点表
    24. scanf("%c", &G->adjList[i].data); //输入顶点信息
    25. G->adjList[i].firstedge = NULL; //将边表置为空表
    26. }
    27. for (k = 0; k < G->numEdges; k++){ //建立边表
    28. printf("输入(vi, vj)上的顶点序号:\n");
    29. scanf("%d, %d", &i, &j); //输入(vi, vj)上的顶点序号
    30. e = (EdgeNode *)malloc(sizeof(EdgeNode)); //向内存申请空间
    31. e->adjvex = j; //邻接序号为j
    32. e->next = G->adjList[i].firstedge; //将e指针指向当前顶点所指向的结点
    33. G->adjList[i].firstedge = e; //将当前顶点的指针指向e
    34. e = (EdgeNode *)malloc(sizeof(EdgeNode)); //向内存申请空间,生成边表结点
    35. e->adjvex = i; //邻接序号为i
    36. e->next = G->adjList[j].firstedge; //将e指针指向当前顶点指向的结点
    37. G->adjList[j].firstedge = e; //将当前顶点的指针指向e
    38. }
    39. }

    瓦雀