图的存储结构之邻接表

本文探讨了邻接矩阵在处理顶点多、边数少的图时的空间浪费问题,进而引出邻接表作为更优的存储结构。邻接表通过一维数组存储顶点,并使用单链表动态存储每个顶点的邻接点,以实现高效的空间利用率。文章还涉及了单链表的操作,如首元结点插入和遍历。
摘要由CSDN通过智能技术生成

       由上篇文章图的存储结构之邻接矩阵中,空间复杂度位n^2,我们能看到,对于顶点个数多,而边数少的图,我们创建邻接矩阵会造成很大的空间浪费,这就需要另外一种存储方式------邻接表。

  1. 邻接表的顶点用一维数组存储,这和邻接矩阵是一致 的,并且方便读取和存储,当然你也能用链表来存储。
  2. 每个顶点Vi的所有邻接点构成一个线性表,由于邻接点的个数不确定,所以要选择单链表存储。

代码伺候:用到了单链表的首元结点的插入以及单链表的遍历

// 图的存储结构之邻接表
//图是由顶点表和边表以及顶点个数和边数组成的,并且知道顶点表就能索引出表链表,所以一个图变量中只有顶点表和顶点个数以及边数就ok了
//首先定义边表结点,然后定义顶点表结点(包括数据域:顶点的名称呢,指针域存放的是边表结点指针)和顶点表,最后定义一个图。

#include "stdafx.h"
#include "stdio.h"
#include  "malloc.h"
#include "string.h"

#define vexmaxnum 100
#define DEBUG
typedef char vextype;
typedef int edgetype;

typedef struct edgenod {     //定义边表结点
	int adjvex;             //存储邻接顶点在顶点表中的下标
	edgetype weight;
	edgenod *next;
}edgenod;

typedef struct vexnode {    //定义顶点表结点
	vextype data[5];           //数据类型
	edgenod *next;          //存放的是边表结点的指针
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值