⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8_2_2.c

📁 数据结构中查询遍历算法等的实例
💻 C
字号:
/* ======================================== */
/*    程式实例: 8_2_2.c                     */
/*    图形的邻接链表表示法                  */
/* ======================================== */
#include <stdlib.h>

struct node                       /* 图形顶点结构宣告    */
{
   int vertex;                    /* 顶点资料            */
   struct node *nextnode;         /* 指下一顶点的指标    */
};
typedef struct node *graph;       /* 图形的结构新型态    */
struct node head[6];              /* 图形顶点结构数组    */

/* ---------------------------------------- */
/*  建立图形                                */
/* ---------------------------------------- */
void creategraph(int *node,int num)
{
   graph newnode;                 /* 新顶点指标          */
   graph ptr;
   int from;                      /* 边线的起点          */
   int to;                        /* 边线的终点          */
   int i;

   for ( i = 0; i < num; i++ )    /* 读取边线的回路      */
   {
      from = node[i*2];           /* 边线的起点          */
      to = node[i*2+1];           /* 边线的终点          */
      /* 建立新顶点记忆体 */
      newnode = ( graph ) malloc(sizeof(struct node));
      newnode->vertex = to;       /* 建立顶点内容        */
      newnode->nextnode = NULL;   /* 设定指标初值        */
      ptr = &(head[from]);        /* 顶点位置            */
      while ( ptr->nextnode != NULL ) /* 遍历至链表尾    */
         ptr = ptr->nextnode;     /* 下一个顶点          */
      ptr->nextnode = newnode;    /* 插入结尾            */
   }
}

/* ---------------------------------------- */
/*  主程式: 建立图形后,将邻接链表印出.      */
/* ---------------------------------------- */
void main()
{
   graph ptr;
   int node[12][2] = { {1, 2}, {2, 1},   /* 边线数组     */
                       {1, 3}, {3, 1},
                       {2, 3}, {3, 2},
                       {2, 4}, {4, 2},
                       {3, 5}, {5, 3},
                       {4, 5}, {5, 4} };
   int i;

   for ( i = 1; i <= 5; i++ )
   {
      head[i].vertex = i;         /* 设定顶点值          */
      head[i].nextnode = NULL;    /* 清除图形指标        */
   }
   creategraph(node,12);          /* 建立图形            */
   printf("图形的邻接链表内容:\n");
   for ( i = 1; i <= 5; i++ )
   {
      printf("顶点%d =>",head[i].vertex);/* 顶点值       */
      ptr = head[i].nextnode;            /* 顶点位置     */
      while ( ptr != NULL )              /* 遍历至链表尾 */
      {
         printf(" %d ",ptr->vertex);     /* 印出顶点内容 */
         ptr = ptr->nextnode;            /* 下一个顶点   */
      }
      printf("\n");                      /* 换行         */
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -