数据结构--------图结构的存储与输出__全世界最可爱的王小帅_CSDN博客

本文介绍了数据结构中图的两种存储方式:邻接矩阵和链式邻接表。邻接矩阵适用于实现图操作,但空间效率较低,尤其在稀疏图中;而邻接表在空间效率上更高,特别适合稀疏图,但判断边的存在需要搜索链表。无向图的邻接矩阵是对称的,邻接表的构建和边的链入顺序可以任意,但必须统一。
摘要由CSDN通过智能技术生成

数据结构cpp版——图结构的存储与输出

图的存储主要分为顺序存储和链式存储
顺序存储的方式主要是邻接矩阵,而链式存储的结构有多种这里主要介绍链式邻接表。
邻接矩阵表示法:
1,建立一个一维数组用来存储图的所有顶点(即建立一个顶点表),建立一个二维数组用来表示各个顶点间是否有边(即建立一个邻接矩阵)
2,假设图A=(V,E)有n个顶点,则图的邻接矩阵是个二维数组A.Edge[n][n]

无向图的邻接矩阵表示法
设i,j∈V 若A.Edge[i][j]=1,则(i,j)∈E,即i j之间存在边,若.Edge[i][j]=0,则i j之间不存在边
在这里插入图片描述

分析1:无向图的邻接矩阵是对称的
分析2:顶点i的度=第i行或者第i列所有1的个数

有向图的邻接矩阵表示方法
在这里插入图片描述

在有向图邻接矩阵中
第i行表示 以结点vi为尾的边(出度边)
第i列表示 以结点vi为头的边(入度边)
顶点的出度=第i行所有元素之和
顶点的入度=第i列所有元素之和

网(即有权图)的邻接矩阵表示方法
设i,j∈V 若A.Edge[i][j]=W,则(i,j)∈E,即i j之间存在边,且其权值为W,若.Edge[i][j]=∞,则i j之间不存在边
在这里插入图片描述
邻接矩阵的优点:容易实现图的操作。比如判断两顶点之间是否有边,求顶点的度,找顶点的邻接点等
缺点:n个顶点需要nn个单元存储边,空间复杂度为O(n*n),如果是稀疏图格外浪费空间。比如如果一个图结构有100顶点但只有10条边,则依旧需要分配10000个存储
.

采用邻接矩阵创建无向网 在这里插入图片描述

【算法思想】
1,输入总顶点数和总边数
2,输入顶点信息
3,初始化邻接矩阵,使每个权值初始化为极大值
4,输入边信息和对应的权值,构造邻接矩阵。

#include<iostream>
using namespace std;
#define max 9999//设置极大值用来代表∞ 
#define num 100 //设置最大顶点数
typedef char dingdian;// 设置顶点类型为字符 
typedef int quanzhi; //设置权值为整型
typedef struct{
   
    dingdian dd[num];//定义用来存放顶点的数组
    quanzhi  lj[num][num];//定义用来存放权值的二维数组创建邻接矩阵
	int ds,bs;//分别表示该图的 总顶点数和总边数 
}Tu;
int look(Tu G,dingdian v)//定义查找顶点对应下标的函数 
	{
   
		int i;
		for(i=0;i<G.ds;i++)
		{
   
			if(G.dd[i]==v)
			return i;
		}
	}
int creattu(Tu &G)//定义创建该图的函数
{
   
	int i,j,k;
	dingdian v1,v2;
	quanzhi w;
	cin>>G.ds;cin>>G.bs; //输入总顶点数和总边数 
	for(i=0;i<G.ds;i
  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值