• 有向图连接链表
    • 图的定义
    • 创建图
    • 列出图
    • main

    有向图连接链表

    图的定义

    1. #include <stdio.h>
    2. #include <malloc.h>
    3. #define MAXVEX 100
    4. typedef char VertexType[3];
    5. typedef struct edgenode
    6. {
    7. int adjvex; /*邻接点序号*/
    8. int value; /*边的权值*/
    9. struct edgenode *next; /*下一条边的顶点*/
    10. } ArcNode; /*每个顶点建立的单链表中结点的类型*/
    11. typedef struct vexnode
    12. {
    13. VertexType data; /*结点信息*/
    14. ArcNode *firstarc; /*指向第一条边结点*/
    15. } VHeadNode; /*单链表的头结点类型*/
    16. typedef struct
    17. {
    18. int n,e; /*n为实际顶点数,e为实际边数*/
    19. VHeadNode adjlist[MAXVEX]; /*单链表头结点数组*/
    20. } AdjList; /*图的邻接表类型*/

    创建图

    1. int CreateAdjList(AdjList *&G) /*建立有向图的邻接表*/
    2. {
    3. int i,b,t,w;
    4. ArcNode *p;
    5. G=(AdjList *)malloc(sizeof(AdjList));
    6. printf("顶点数(n),边数(e):");
    7. scanf("%d%d",&G->n,&G->e);
    8. for (i=0;i<G->n;i++)
    9. {
    10. printf(" 序号为%d的顶点信息:", i);
    11. scanf("%s",G->adjlist[i].data);
    12. G->adjlist[i].firstarc=NULL;
    13. }
    14. for (i=0;i<G->e;i++)
    15. {
    16. printf(" 序号为边=>",i);
    17. printf(" 起点号 终点号 权值:");
    18. scanf("%d%d%d",&b,&t,&w);
    19. if (b<G->n && t<G->n && w>0)
    20. {
    21. p=(ArcNode *)malloc(sizeof(ArcNode)); /*建立*p结点*/
    22. p->value=w;p->adjvex=t;
    23. p->next=G->adjlist[b].firstarc; /**p插入到adjlist[b]的单链表之首*/
    24. G->adjlist[b].firstarc=p;
    25. }
    26. else
    27. {
    28. printf("输入错误!\n");
    29. return(0);
    30. }
    31. }
    32. return(1);
    33. }

    列出图

    1. void DispAdjList(AdjList *G)
    2. {
    3. int i;
    4. ArcNode *p;
    5. printf("图的邻接表表示如下:\n");
    6. for (i=0;i<G->n;i++)
    7. {
    8. printf(" [%d,%3s]=>",i,G->adjlist[i].data);
    9. p=G->adjlist[i].firstarc;
    10. while (p!=NULL)
    11. {
    12. printf("(%d,%d)->",p->adjvex,p->value);
    13. p=p->next;
    14. }
    15. printf("∧\n");
    16. }
    17. }

    main

    1. void main()
    2. {
    3. AdjList *G;
    4. CreateAdjList(G);
    5. DispAdjList(G);
    6. }