首页 / 科技百科

数据结构图的定义和存储结构

2025-05-03 08:27科技百科

图(Graph)是由顶点(图中的结点称为图的顶点)的非空有限集合V(由N0个顶点组成)与边的集合E(顶点之间的关系)所构成的。

根据“存数据存联系”的存储原则,由图的定义可知,图是由顶点和边组成的,因此在存储中,除了要存储结点的信息,还要存储边的信息。

图结构中的结点间没有确定的关系,任意两点之间都可能存在联系,因此无法像树结构那样用顺序结构既存放结点数据,同时又存放结点间的关系,但如果把顶点和边的信息分开存放在顺序结构中,则应该是可以的。

1 图的数组表示法

1.1 邻接矩阵

1.2 边集数组

2 图的链表表示法

2.1 邻接表

2.2 十字链表

2.3 邻接多重表

3 存储结构的比较

1 图的数组表示法

1.1 邻接矩阵

顶点集:一维数组vertex[n] (一个具有n个顶点的图);

1.2 边集数组

顶点集:一维数组;

边集:一维数组(数组元素为结构体);

typedef struct{

VexType start_vex;

VexType end_vex;

InfoType weight;

} EdgeStruct;

EdgeStruct EdgeSet[Edge_MAX_NUM];

2 图的链表表示法

2.1 邻接表

图中的边是由每个顶点Vi与其邻接点构成,每个顶点Vi的所有邻接点构成一个线性表,考虑图的一般情形,对任一顶点Vi来说,邻接点的个数不确定,因此选择用单链表来存储,即对图的每个顶点建立一个单链表(n个顶点建立n个单链表),第i个单链表中的结点包含顶点Vi的所有邻接结点。

余下为的问题是如何把这n个单链表组织在一起,便于管理。对n个单链表并行管理可以采用“带行向量的链表表示方法”,称为邻接表。邻接表是图的一种链式存储结构,由头结点表和邻接结点链表组成:

头结点表:一维数组(数组元素为结构体,结构体的指针链指向邻接结点链表)

邻接结点链表:链接线性表(单链表)

在有向图中,有入度和出度的概念。有向图的顶点vi的入度是指以顶点vi为终点的弧的数目。顶点vi的出度是指以vi为起始点的弧的数目。入度和出度的和为有有向图顶点vi的度。有向图的邻接表只描述顶点的出度:

有向图的逆邻接表只描述顶点的入度:

实例代码:

#include stdio.h

#include stdlib.h

#define TRUE 1

#define FALSE 0

#define N 8

typedef int VexType;

int AdjMatrix[N][N]=

{{0,1,1,0,0,0,0,0},

{1,0,0,1,1,0,0,0},

{1,0,0,0,0,1,1,0},

{0,1,0,0,0,0,0,1},

{0,1,0,0,0,0,0,1},

{0,0,1,0,0,0,1,0},

{0,0,1,0,0,1,0,0},

{0,0,0,1,1,0,0,0}};

typedef struct Adjnode

{

int adjvex;

struct AdjNode *next;

} AL_AdjNode;

typedef struct

{

VexType vertex;

struct AdjNode *link;

} AL_VexNode;

void Create_AdjList()

{

int i,j;

AL_VexNode VexList[N]={0,NULL};

AL_AdjNode *Ptr,*nextPtr;

for(i=0;iN;i )

{

VexList[i].vertex=i;

VexList[i].link=NULL;

j=0;

while(jN)

{

if(AdjMatrix[i][j]!=0)

{

Ptr=(AL_AdjNode*)malloc(sizeof(AL_AdjNode));

Ptr-adjvex=j;

Ptr-next=NULL;

if(VexList[i].link==NULL)

{

VexList[i].link=Ptr;

nextPtr=Ptr;

}

else

{

nextPtr-next=Ptr;

nextPtr=Ptr;

}

}

j ;

}

}

}

int main()

{

Create_AdjList();

system("pause");

return 0;

}

2.2 十字链表

如果想同时求得有向图某一个顶点的出度和入度,则需要同时存储邻接表和逆邻接表。十字链表也可以理解为将行的单链表和列的单链表结合起来存储稀疏矩阵,每个结点表示一个非零元素。

2.3 邻接多重表

对于无向图,如何设计每条边只出现一次的链表存储形式?可以借鉴边集数组对边的描述方式,一条边为一个边结点,再将边结点之间的联系通过同顶点的线索链接起来即可。由于一条边关联两个顶点,所以一个边结点要设置两个指针域。

邻接多重表的存储结构和十字链表类似,也是由顶点表和边表组成,邻接多重表中,每一条 边的信息用一个结点描述,一条边对应一个边结点。边结点除了边关联的两个顶点ivex、jvex外,再加上与这两个边结点边接接的边结点位置。

在下图中,无向图的边集数组给出了每条边的信息(可以按照起点i在外循环、终点j在内循环,从小到大的顺序排列)。根据边信息,再确定i连接边、j连接边的结点对应位置,如对应边a(v0,v1),起点v0(边集数组中值为0)的连接边为边b(v0,v3),终点v1(边集数组中值为1)的连接边为c(v1,v2)。

如上图所示:

I 边的确定:v0→v1→v2→……确定a→b→c……;

II 在顶点表中,

v0的连接边有a,b,则node *firstedge为a,下一条边*ilink或*jlink为b;

v1的连接边有a,c,d,则node *firstedge为a,下一条边*ilink或*jlink为c或c后的d;

上图的i连接边和j连接边都是本连接边后的第二条连接边(如上图的边表中,i连接边和j连接边都是大于边编号的边);

//邻接多重表的顶点结构

typedef struct vnode

{

VexType vertex;

struct node *firstedge; //指向第一条依附于该顶点的边

}AML_VertexNode;

//邻接多重表的顶点表

AML_VertexNode G[VERTEX_NUM];

//邻接多重表的边结点结构

typedef struct node

{

int ivex,jvex;

struct node *ilink, *jlink; //分别指向依附于ivex和jvex的下一条边。

}AML_EdgeNode;

3 存储结构的比较

各种存储表示各有利弊,具体应用时,要根据图的稠密和稀疏程序以及运算的要求进行选择。

存储方法实现方法优点缺点关注重点
邻接矩阵二维数组易判断两点间的关系占用空间顶点
容易求得顶点的度
邻接表链表节省空间不易判断两点间的关系顶点
易得到顶点的出度不易得到顶点的入度
十字链表链表空间要求较小结构较复杂
易求得顶点的出度和入度
邻接多重表链表节省空间结构较复杂
易判断两点间的关系

-End-

猜你喜欢

  • 排行榜

    装修建材2025年中报净利润达1个亿的企业名单数据

    从这份净利润排名数据来看,装修建材行业的企业盈利呈现以下特点:一、头部企业优势显著 北新建材以19.30亿的净利润遥遥领先,在行业内具有明显的规模和盈利优势,其市场地位和盈利能力处于第一梯队。顾家家居和欧派家居净利润均超10亿,紧随其后,这两家企业在家居领域的品牌影响力和市场份额助力其实现较好盈利,属于行..

    2025-09-25
  • 世界排行

    今日数据精选:中国男足最新世界排名第94;低价电商件上海地区快递要涨价了

    【宏观经济及政策】利率超2% 部分银行在售大额存单额度紧俏在银行存款利率普遍进入“1%时代”的背景下,年利率(下同)超过2%的大额存单正成为市场上的“稀缺资源”。记者调研发现,尽管多数银行大额存单利率已降至2%以下,部分民营银行仍可提供利率高于2%的大额存单产品,但对额度、客户所在地等有限制。总体上看,当前大..

    2025-09-23
  • 世界最高

    全球规模最大+3!一组数据看“美丽中国”新成就!

    9月19日上午,国务院新闻办公室举行“高质量完成‘十四五’规划”系列主题新闻发布会,生态环境部相关负责人介绍“十四五”时期以生态环境高水平保护、推动高质量发展情况,并答记者问。会上介绍,我国已建成全球规模最大的碳排放权交易市场、全球规模最大的清洁钢铁生产体系、全球规模最大的生态环境监测网络……戳图!一..

    2025-09-21
  • 探索百科

    这样诡异人造结构 给人类移民火星带来希望

    科学家认为制造一种特殊的人体构造,就能适应火星特殊的环境。科学家在研究人工合成生命体,这样能够解决一系列生存问题,哪怕是在火星那样的环境下,这样的人体结构也能顺利生活下去。火星移民困难尽管科学家这些年在火星移民方面做出了很多努力,可是我们都知道人类要想真正的移居火星,仍然是一件短期内无法实现的事情。..

    2025-09-20
  • 民俗百科

    靖远县三大产业结构

    走进北湾镇富坪村,一排排崭新整齐的房屋映入眼帘,笔直的硬化路延伸到村子的每一个角落。文化广场上,孩子们欢笑嬉闹,老人们围坐闲聊,呈现出一幅各民族团结发展的秀美画卷。近年来,靖远县北湾镇紧紧围绕“中华民族一家亲,同心共筑中国梦”的总目标,将民族团结进步与产业发展、乡村振兴深度融合,充分发挥党建引领作用..

    2025-09-17
  • 机械之最

    机械革命耀世16Ultra评测 主流性能做工精致 长江存储PC450亮点多

    【ZOL中关村在线原创评测】如今游戏笔记本可谓劲头正猛,主流玩家也从单一的配置优先和性能释放,转为追求更高的品质做工、更震撼的屏幕和更稳定的使用体验,还要有更高的性价比。机械革命耀世16Ultra正是在这样市场需求下应运而生的高能之作,将Intel酷睿Ultra7 225HX处理器与NVIDIA Geforce RTX 5060独立显卡双剑合璧,再..

    2025-09-13
  • 育儿百科

    13省份2022年人口数据出炉 人口数据负增长说明什么问题

    2022年人口数据已经有13个省份发布了,多省出现了人口增长率第一次转负,从很多数据表明,人口负增长已经定局,那么,人口数据负增长说明什么问题?下面小编就带来介绍。13省份2022年人口数据出炉近期,各省份正陆续公布2022年的人口数据。目前已有13省份发布了2022年的人口数据。在13个省份中,有10个省份实现常住人口正增..

    2025-09-12
  • 排行榜

    2025最新数据:中国6大AAAAA王牌景区排名出炉,90%的人只去过1个

    探寻国宝数据不会说谎。最新统计显示, 这6处AAAAA景区凭借超高含金量登顶榜单。每一处都是中华文明的璀璨明珠, 却有90%的游客只去过其中一个, 实在遗憾。是时候收拾行囊, 去见证真正的人间仙境了。第6名·四川·九寨沟童话秘境, 人间天堂九寨归来不看水, 这句话绝非夸张。翠海、叠瀑、彩林、雪峰构成的绝美画卷, 每一眼都..

    2025-09-09

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制
蜂鸟影院2048影视资源论坛熊猫影视河马影视星辰影视萝卜影院八哥电影网人人看电影无忧影视网橙子影视网叮当影视网天天影视网青青影视网电影天堂开心追剧网西瓜影院麻花影视网70影视网年钻网茶小舍电影藏影堂新神州影域煮酒观影体积影视爱看影院星光电影至尊影院极影公社超清视界