数据结构——图(邻接链表)

邻接链表

邻接矩阵是不错的⼀种图存储结构,但是我们也发现,对于边数相对顶点较少的图,这种结构是存在对存储空间的极大浪费的。比如说,如果我们要处理下图这样的稀疏有向图,邻接矩阵中除了arc[1][0]有权值外,没有其他弧,其实这些存储空间都浪费掉了。
在这里插入图片描述
因此选择一种新的数据结构来存储这种稀疏图则尤为重要了。此时则使用链表结构来存储原来的连接信息。
在这里插入图片描述

定义如下数据结构

//图的邻接链表存储结构

//边表节点结构,一个adjvex用来存储邻接点的位置,一个next指针用来指向下一个节点
typedef struct EdgeNode
{
   
	int adjvex;  //存储顶点下标信息
	struct EdgeNode *next;
} EdgeNode;

//顶点表节点结构
typedef struct
{
   
	string Vexs;  //用来存储顶点信息
	EdgeNode *firstedge;  //用来存储当前顶点的下一个顶点
} VexList;

//这里用动态数组存储顶点表,然后numVertex,numEdge是一个图的顶点数和边数
typedef struct
{
   
	vector<VexList> VexList;
	int Vertexs, Edges;
} GraphList;

创建图

此处创建边表使用的方法是尾插法,《大话数据结构》中使用的是头插法,个人感觉尾插法比较容易理解。其他的方面和邻接矩阵创建图时的思路基本一样。

void CreateGraph(GraphList * G)
{
   
	string v1, v2;
	EdgeNode * e, *p, *q;
	cout << "请输入顶点数和边数:" << endl;
	cin >> G->Vertexs >> G->Edges;
	cout << "请输入顶点的信息:" << endl;
	for (int i = 0; i < G->Vertexs; ++i){
   
		VexList tmp;
		cin >> tmp.Vexs;
		tmp.firstedge = NULL;
		G->VexList.push_back(tmp);
	}
	for</
  • 30
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值