8_2_2.C
上传用户:wyn840322
上传日期:2007-01-13
资源大小:294k
文件大小:3k
源码类别:

数据结构

开发平台:

C/C++

  1. /* ======================================== */
  2. /*    程式实例: 8_2_2.c                     */
  3. /*    图形的邻接链表表示法                  */
  4. /* ======================================== */
  5. #include <stdlib.h>
  6. struct node                       /* 图形顶点结构宣告    */
  7. {
  8.    int vertex;                    /* 顶点资料            */
  9.    struct node *nextnode;         /* 指下一顶点的指标    */
  10. };
  11. typedef struct node *graph;       /* 图形的结构新型态    */
  12. struct node head[6];              /* 图形顶点结构数组    */
  13. /* ---------------------------------------- */
  14. /*  建立图形                                */
  15. /* ---------------------------------------- */
  16. void creategraph(int *node,int num)
  17. {
  18.    graph newnode;                 /* 新顶点指标          */
  19.    graph ptr;
  20.    int from;                      /* 边线的起点          */
  21.    int to;                        /* 边线的终点          */
  22.    int i;
  23.    for ( i = 0; i < num; i++ )    /* 读取边线的回路      */
  24.    {
  25.       from = node[i*2];           /* 边线的起点          */
  26.       to = node[i*2+1];           /* 边线的终点          */
  27.       /* 建立新顶点记忆体 */
  28.       newnode = ( graph ) malloc(sizeof(struct node));
  29.       newnode->vertex = to;       /* 建立顶点内容        */
  30.       newnode->nextnode = NULL;   /* 设定指标初值        */
  31.       ptr = &(head[from]);        /* 顶点位置            */
  32.       while ( ptr->nextnode != NULL ) /* 遍历至链表尾    */
  33.          ptr = ptr->nextnode;     /* 下一个顶点          */
  34.       ptr->nextnode = newnode;    /* 插入结尾            */
  35.    }
  36. }
  37. /* ---------------------------------------- */
  38. /*  主程式: 建立图形后,将邻接链表印出.      */
  39. /* ---------------------------------------- */
  40. void main()
  41. {
  42.    graph ptr;
  43.    int node[12][2] = { {1, 2}, {2, 1},   /* 边线数组     */
  44.                        {1, 3}, {3, 1},
  45.                        {2, 3}, {3, 2},
  46.                        {2, 4}, {4, 2},
  47.                        {3, 5}, {5, 3},
  48.                        {4, 5}, {5, 4} };
  49.    int i;
  50.    for ( i = 1; i <= 5; i++ )
  51.    {
  52.       head[i].vertex = i;         /* 设定顶点值          */
  53.       head[i].nextnode = NULL;    /* 清除图形指标        */
  54.    }
  55.    creategraph(node,12);          /* 建立图形            */
  56.    printf("图形的邻接链表内容:n");
  57.    for ( i = 1; i <= 5; i++ )
  58.    {
  59.       printf("顶点%d =>",head[i].vertex);/* 顶点值       */
  60.       ptr = head[i].nextnode;            /* 顶点位置     */
  61.       while ( ptr != NULL )              /* 遍历至链表尾 */
  62.       {
  63.          printf(" %d ",ptr->vertex);     /* 印出顶点内容 */
  64.          ptr = ptr->nextnode;            /* 下一个顶点   */
  65.       }
  66.       printf("n");                      /* 换行         */
  67.    }
  68. }