数据结构 图的邻接矩阵表示法

对于图来说,邻接矩阵是不错的一种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。因此我们考虑另外一种存储结构方式:邻接表,即数组与链表相结合的存储方法。

邻接表的处理方法是这样的。

1、图中顶点用一个一维数组存储,另外,对于顶点数组中,每个数据元素还需要存储指向第一个邻接点的指针,以便于查找该顶点的边信息。

2、图中每个顶点vi的所有邻接点构成一个线性表,由于邻接点的个数不定,所以用单链表存储,无向图称为顶点vi的边表,有向图称为顶点vi作为弧尾的出边表。

表示方法如下:


#include<iostream>
#define MAXSIZE 10
using namespace std;

typedef int WeightType;
typedef int Vertex;
typedef int DataType;
//邻接表的表示方法

//图的框架
typedef graphic *PtrToGraphic;
struct graphic 
{
	int Nv;  //顶点的个数
	int Ne;  //边的条数

	adjList G;         //邻接表
};
typedef PtrToGraphic LGraphic;

//边的表示
//(1)一个节点包括 边和边所指顶点的编号
typedef AdjVNode *PtrToAdjVnode;
struct AdjVNode
{   
	Vertex adjNode;     //所指顶点的编号
	WeightType weight;  //边权重
	PtrToAdjVnode next;  //指向下一个节点

};

//(2)插入用 一个边存有两条节点
typedef AdjEdge *PtrAdjEdge;
struct AdjEdge
{
	Vertex V1;  //顶点1
	Vertex V2;  //顶点2
	WeightType Weight;  //边的权重
};
typedef PtrAdjEdge Edge;


//顶点的表示
typedef struct Vnode
{
	PtrToAdjVnode FirstEdge;  //在邻接表中 表示第一条边
	DataType data;
	

}adjList[MAXSIZE];


//图的创建
LGraphic createLGraphic(int vertexNum) {  //创建一个图

	Vertex V, W;     //用来遍历
	LGraphic Grahic;

	Grahic = (LGraphic)malloc(sizeof(struct graphic));  //创建

	Grahic->Nv = vertexNum;
	Grahic->Ne = 0;

	for (V = 0; V < Grahic->Nv; ++V) {
	     Grahic->G[V].FirstEdge = NULL;
    }

	return Grahic;  //返回图
}

//边的插入
void InsertIntoGraphic(LGraphic Graphic, Edge E) {

	PtrToAdjVnode NewNode;
	NewNode = (PtrToAdjVnode)malloc(sizeof(struct Vnode));  //赋值

	NewNode->weight = E->weight;
	NewNode->adjNode = E->V2;  //边所指向的顶点

	NewNode->next = Graphic->G[E->V1].FirstEdge;
	Graphic->G[E->V1].FirstEdge = NewNode;

	return;
}







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值