第六章 图——图的存储结构

图的邻接矩阵表示法

#define MaxInt 32767 //表示极大值,表示两个顶点之间没有连线
#define MVNum 100 //最大顶点数
typedef char VerTexType;
typedef int ArcType;

typedef struct
{
	VerTexType vexs[MVNum];  //顶点表
	ArcType arcs[MVNum][MVNum];  //邻接矩阵
	int vexnum, arcnum; //图的当前点数和边数
}AMGraph; //Adjacency Matrix

图的邻接表表示法

//边结点
/*
	adjvex info  *nextarc
*/
typedef struct ArcNode
{
	int adjvex;  //该边所指向的顶点位置
	struct ArcNode *nextarc;
	OtherInfo info; //一般是边的权值
}ArcNode;

//顶点数组
/*
	data *firstarc
*/
typedef struct VNode
{
	VerTexType data;
	ArcNode *firstarc;
}VNode, AdjList[MVNum]; //结构数组

typedef struct
{
	AdjList vertices;
	int vexnum, arcnum;
}ALGraph; //Adjacency List

有向图的十字链表存储表示

//有向图的另一种链式存储结构
//便于求顶点的入度和出度

#define MAX_VERTEX_NUM 20

//弧结点
/*
	tailvex headvex hlink tlink info
*/
typedef struct ArcBox
{
	int tailvex, headvex;  //弧的头和尾顶点的位置
	struct ArcBox *hlink,*tlink;  //弧头相同的和弧尾相同的链域
	Otherinfo info;
}ArcBox;


//顶点结点
/*
	data *firstin *firstout
*/
typedef struct VexNode
{
	VerTexType data;
	ArcBox *firstin, *firstout; //指向以该顶点为弧头的和弧尾的弧
}VexNode;

typedef struct 
{
	VexNode xlist[MAX_VERTEX_NUM];
	int vexnum, arcnum;
}OLGraph; //Othorgonal List

/*
	弧结点的两个指针都由头插法插入,正好对应顶点结点的两个指针
*/

无向图的邻接多重表存储表示

#define MAX_VERTEX_NUM 20

typedef enum{unvisited, visited} VisitIf;

//边结点
/*
	mark ivex ilink jvex jink info
*/
typedef struct EBox
{
	VisitIf mark;
	int ivex, jvex; //边依附的两个顶点的位置
	struct EBox *ilink, *jlink;  //分别指向依附这两个顶点的下一条边
	InfoType *info;
}Ebox;

//顶点结点
/*
	data firstedge
*/
typedef struct VexBox
{
	VerTexType data;
	EBox *firstedge;
}VexBox;

typedef struct
{
	VexBox adjmulist[MAX_VERTEX_NUM];
	int vexnum, edgenum;
}AMLGraph; //Adjacency Multilist
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值