数据结构-图(存储结构与算法代码)

本文介绍了图的几种存储方法,包括邻接矩阵、邻接表、十字链表和邻接多重表。邻接矩阵适合无向图,直观但可能浪费空间;邻接表适合有向图,方便查看出度;十字链表记录入度和出度;邻接多重表是对无向图的优化,节省空间。文章适合回顾和获取代码,不适合深入学习。
摘要由CSDN通过智能技术生成

本文章图片都是网络查找,如果有侵权请联系作者删除。
该文章只适合看一看或者回顾一下,或者是把代码拿走,不适合去学习和理解前辈写的东西


一、前识

1. 无向图的存储: 邻接矩阵法 和 邻接多重表(没有代码)

2. 有向图的存储: 邻接表 和 逆邻接表(没有代码) 和 十字链表


二、邻接矩阵

针对无向图用邻接矩阵
邻接矩阵像矩阵一样,行和列看都存在一种关系.对于无向图用邻接矩阵法存储

  1. 优点是:明确谁和谁有联系,数值是多少,直观
  2. 缺点是:A-B a和b都存在关系而且权值是一样的,那么他要存两次,若是关系很稀疏的话则浪费了内存空间

在这里插入图片描述

用二维数组来代表矩阵就可以了,这有行也有列,代表鲜明

#include <stdio.h>
#include <stdlib.h>
#define MaxVertexNum 10
//邻接表

typedef int EdgeType;//边上的权值 
typedef char VextextType;//顶点类型 
typedef struct{
   
	VextextType vexs[MaxVertexNum];
	EdgeType edges[MaxVertexNum][MaxVertexNum];//邻接矩阵 
	int n,e;//边数和顶点数 
}AdjGragh; 

//建立无向图的邻接矩阵表示
void CreateMGraph(AdjGragh *G)
{
   
	int i,j,k,w;
	scanf("%d%d",&G->n,&G->e);//存多少个顶点和多少条边
	for(i=0;i<G->n;i++){
   
		G->vexs[i] = getchar();
	}	
	for(i=0;i<G->n;i++){
   
		for(j=0;j<G->n;j++){
   
			G->edges[i][j] = 0; 
		}
	}
	for(k = 0; k<G->e;k++){
   
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值