知识大全 图 - 图的存储结构 - 邻接表表示法(二)

Posted 结点

篇首语:临文乍了了,彻卷兀若无。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 图 - 图的存储结构 - 邻接表表示法(二)相关的知识,希望对你有一定的参考价值。

   邻接表的形式说明及其建表算法

  ( )邻接表的形式说明

  typedef struct node//边表结点

  int adjvex; //邻接点域

  struct node *next; //链域

  //若要表示边上的权 则应增加一个数据域

  EdgeNode;

  typedef struct vnode //顶点表结点

  VertexType vertex; //顶点域

  EdgeNode *firstedge;//边表头指针

  VertexNode;

  typedef VertexNode AdjList[MaxVertexNum];//AdjList是邻接表类型

  typedef struct

  AdjList adjlist;//邻接表

  int n e; 图中当前顶点数和边数

  ALGraph; //对于简单的应用 无须定义此类型 可直接使用AdjList类型

  ( )建立无向图的邻接表算法

  void CreateALGraPh(ALGrahp *G)

  //建立无向图的邻接表表示

  int i j k;

  EdgeNode *s;

  scanf( %d%d &G >n &G >e); //读人顶点数和边数

  for(i= ;i n;i++)//建立顶点表

  G >adjlist[i] vertex=getchar(); //读入顶点信息

  G >adjlist[i] firstedge=NULL;//边表置为空表

  for(k= ;k e;k++)//建立边表

  scanf( %d%d &i &j);读入边(v i v j )的顶点对序号

  s=(EdgeNode *)malloc(sizeof(EdgeNode)); //生成边表结点

  s >adjvex=j; //邻接点序号为j

  s >next=G >adjlist[i] firstedge;

  G >adjlist[i] firstedge=s; //将新结点*s插入顶点v i 的边表头部

  s=(EdgeNode *)malloc(sizeof(EdgeNode));

  s >adjvex=i; //邻接点序号为i

  s >next=G >adjlist[j] firstedge;

  G >adjlistk[j] firstedge=s; //将新结点*s插入顶点v j 的边表头部

  //end for

  CreateALGraph

  该算法的时间复杂度是O(n+e)

  注意

  ① 建立有向图的邻接表更简单 每当读人一个顶点对序号 时 仅需生成一个邻接序号为j的边表结点 将其插入到v j 的

  出边表头部即可

  ② 建立网络的邻接表时 需在边表的每个结点中增加一个存储边上权的数据域

  图的两种存储结构比较

  邻接矩阵和邻接表是图的两种最常用的存储结构 它们各有所长 下面从及执行某些常用操作的时间这两方面来作一比较

  

> cha138/Article/program/sjjg/201311/23842

相关参考