图的储存结构及遍历

来学习图的储存结构啦
摘要由CSDN通过智能技术生成

数据结构14天重点学习


前言

图是数据结构中数据关系最复杂的一种结构


提示:以下是本篇文章正文内容,下面案例可供参考

一、图的储存结构

1图的两种储存结构

图的储存结构主要有两种,一种是邻接表表示法,另一种是邻接矩阵表示法。
邻接矩阵
优点
容易获得每个顶点的度,特别是对于有向图,获得顶点i的出度,只需遍历第i行,即arc[i][]的值,入度也只需遍历第i列,即arc[][i]。
缺点:
对于边数相对顶点较少的图,浪费了极大的储存空间。
邻接表
优点
便于增加和删除顶点
便于统计边的数目,按顶点表顺序扫描所有边表可得到边的数目,时间复杂度为O(n)
空间利于效率高避免了储存空间的浪费
缺点
对于有向图,出度和入度是不兼得的,要两样都获得就只能分别建立、遍历对应的邻接表和逆邻接表空间利用率和效率也不高。

2储存结构代码表示及建立

1)邻接矩阵
通过一个一维数组表示顶点,通过一个二维数组表示顶点间的关系

`邻接矩阵

代码如下

#define VertexNum 20
#define MaxWeight 99
typedef char Vertextype;
typedef int EdgeType;
typedef struct{
   
	Vertextype vex[VertexNum];//储存顶点信息
	EdgeType edges[VertexNum][VertexNum];//储存边的信息
	int n,e;
	}MGraph;
void CreateMGraph(MGraph *G)
{
   
	int i,j,k;//定义i,j用于之后遍历输入使用,k用于输入权值信息 
		EdgeType w;// 
		printf("读入顶点数和边数:\n");
	scanf("%d %d",&G->n,&G->e);
//	getchar();
	fflush(stdin);//防止键盘输入影响后面 
	printf("读入顶点信息,建立顶点表:");
	for(i=0;i<G->n;i++){
   
		printf("第%d个顶点",i+1);
		scanf("%c",&G->vexs[i]);
		getchar();}
	printf("输入边表信息,建立边表\n"); 
	for(i=0;i<G->n;i++){
   
		for(j=0;j<G->n;j++){
   
			G->edges[i][j]=MaxWeight;}}//初始化各边的权值 
	for(k=0;k<G->e;k++)//赋权值 
	{
   
		printf("输入矩阵信息,i,j,w:");
		scanf("%d %d %d",&i,&j,&w)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值