图的邻接表存储结构的定义及其遍历

因为之前的一篇博客图的十字链表存储结构的实现及其遍历是图的邻接表存储结构的延伸,所以这里只是简单的谈一下。微笑

邻接表存储结构的定义:

#define MaxVex 20   
typedef char VertexType ; // 顶点的类型
typedef int  EdgeType ;   // 边的类型

typedef struct EdgeNode  // 边表结点
{
	int adjvex ;   // 该弧指向的顶点的位置
	struct EdgeNode * nextarc ;  // 指向下一条弧的指针
} EdgeNode ;

typedef struct VertexNode    // 顶点表结点
{
	VertexType data ;      // 顶点信息
	EdgeNode * firstarc ;  // 指向第一条依附该顶点的弧的指针
} VertexNode , AdjList[MaxVex] ;

typedef struct ALGraph  // 图的类型的定义
{
	AdjList vertices ;
	int vexnum ;  // 顶点数
	int arcnum ;  // 边数目 
} ALGraph ;

这里的图的类型是一个无向图,在实现的过程中无向图与有向图是没有什么区别的,只是无向图中的边当做有向图中的两条弧来使用而已,即A顶点与B顶点相连,那么在无向图中A到B有一条边,B到A有一条边。但是在有向图中必须要加以区分,到底是A到B的弧还是B到A的弧,或者说是A到B与B到A各有一条弧。

下面邻接表存储结构的图的创建中可以看到这一点的区别:

// 创建图
void CreateGraph( ALGraph * G )
{
	InitGraph( G ) ;  // 初始化图

	printf("请输入结点信息:") ;
	for( int i = 0 ; i < G->vexnum ; i++ )
	{
		scanf("%c" , &G->vertices[i].data ) ;
		G->vertices[i].firstarc = NULL ;
	}

	printf("请输入弧信息:") ;
	int index ;               // 该弧的其实顶点的下标
	for( i = 0 ; i < G->arcnum ; i++ )
	{
		EdgeNode * edge = (EdgeNode*)malloc(sizeof(EdgeNode)) ;
		scanf("%d %d" , &index , &edge->adjvex ) ;
		edge->nextarc = NULL ;

		EdgeNode * p = G->vertices[index].firstarc ;
		if( p == NULL )
		{
			G->vertices[index].firstarc = edge ;
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值