数据结构图的基本操作c语言_C语言:数据结构-图的存储结构-邻接表

邻接表(adjacency list)

是对图中的每个顶点建立一个邻接关系的单链表,并把它们的表头指针用向量存储的一种图的表示方法。为顶点vi建立的邻接关系的单链表称做vi邻接表。vi邻接表中的每个结点用来存储以该顶点为端点或起点的一条边的信息,因而被称为边结点。vi邻接表中的结点数,对于无向图来说,等于vi的边数,或邻接点数或度数;对于有向图来说,等于vi的出边数、或出边邻接点数或出度数。边结点通常包含三个域:一是邻接点域(adjvex),用以存储顶点vi的一个邻接顶点vj的序号j;二是权域(weight),用以存储边(vi,vj)或i,vj>上的权;三是链域(next),用以链接vi邻接表中的下一个边结点。在这三个域中,邻接点域和链域是必不可少的,权域可根据情况取舍,若表示的是无权图,则可省去此域。对于每个顶点vi的邻接表,需要设置一个表头指针,若图G中有n个顶点,则就有n个表头指针。为了便于随机访问任一顶点的邻接表,需要把这n个表头指针用一个向量(即一维数组)存储起来,其中第i个分量存储vi邻接表的表头指针。这样,图G就可以由这个表头向量来表示和存取。

图7-1中的G1和图7-5中的G6对应的邻接表分别如图7-6(a)和(b)所示。

a26254ddde6eaea7ba538eb92bc5cfff.png
0c15fbcac4d0695410de6ff746be6171.png
d2f7add0adfc6740463fa3dfc3421a65.png
944eab5f0d6a5037a7c4dba242caafb4.png

图的邻接表不是唯一的,因为在每个顶点的邻接表中,各边结点的链接次序可以任意安排,其具体链接次序与边的输入次序和生成算法有关。

下面给出建立图的邻接表的有关类型定义和生成一个有向图邻接表的算法描述。

 /*定义图的最大顶点数,它要大于等于具体图的顶点数n*/ #define MaxVertexNum 8 /*定义图的最大边数,它要大于等于具体图的边数e*/ #define MaxEdgeNum 20 /*定义图中顶点数据的类型VertexType为整型*/ typedef int VertexType; /*定义vexlist为存储顶点信息的数组类型*/ typedef VertexType vexlist[MaxVertexNum]; /*定义邻接表中的边结点类型*/ struct edgenode { int adjvex; /*邻接点域*/ int weight; /*权值域,假定为整型,对无权图可省去*/ struct edgenode* next; /*指向下一个边结点的链域*/ }; /*定义adjlist为存储n个表头指针的数组类型*/ typedef struct edgenode* adjlist[MaxVertexNum];

有向图邻接表的生成算法

void Create2(vexlist GV, adjlist GL, int n, int e) /*通过从键盘上输入的 n个顶点信息和e条有向无权边的信息建立顶点数组GV和邻接表GL*/{ int i,j,k; /*建立顶点数组*/ printf("输入%d个顶点数据
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值