首页 / 科技百科

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

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-

猜你喜欢

  • 排行榜

    存储+汽车芯片双赛道爆发!这8家正宗龙头,掌握国产替代核心密码

    当智能汽车进入“算力竞赛”时代,存储芯片是数据流转的“高速公路”,汽车芯片是整车运行的“神经中枢”,两者的融合布局已成企业抢占行业红利的关键。从车规级存储的高可靠要求到车载芯片的极端环境适配,8家国产企业凭借技术突破站稳脚跟,成为双赛道的核心玩家。 注意:以下内容绝不构成任何投资建议、引导或承诺,仅供..

    2025-11-04
  • 数据连接线十大品牌排行榜,数据连接线哪个牌子好?

    数据连接线哪个牌子好?连接线在日常生活中都是存在的,他对电流的传输起到了很大的作用,好的连接线的质量一定是好的,也有安全质量的保障,在性能等方面也是也是非常让人放心的,那有哪些拍的连接线是比较好的的,下面我们来了解一下数据连接线十大品牌。数据连接线十大品牌排行榜:以瑟、佰瑞特、坚威、德力西、上德、欧..

    2025-11-01
  • 探索百科

    宇宙中最大的结构仍然因其创造的震撼而发光

    据美国物理学家组织网(by Tessa Vernstrom and Christopher Riseley, The Conversation):在最大的尺度上,宇宙是有序的网状模式:星系被拉在一起形成星系团,星系团由细丝连接,由空洞分隔。这些星团和细丝包含暗物质,以及气体和星系等常规物质。我们称之为“宇宙网”,我们可以通过用光学望远镜进行的大型调查来绘制星..

    2025-10-31
  • 商业之最

    北京太古坊全楼体结构封顶,坝河畔将崛起新一代滨水商业地标

    太古地产日前宣布,位于北京朝阳区坝河河畔的北京太古坊(Taikoo Place Beijing)综合发展项目,全部八栋在建楼体已实现结构封顶。这一里程碑事件标志着这座与现有颐堤港项目整合升级的滨水商业地标,正式进入建设新阶段,未来将以“北京太古坊”之名,重塑区域商业格局。北京太古坊鸟瞰图北京太古坊总楼面面积超86万平方米..

    2025-10-22
  • 热点百科

    玩偶之家第三幕故事梗概(玩偶之家第三幕情节结构)

    雅典三大悲剧作家之一索福克勒斯曾说:"沉默使女人显得更优雅。"而中国的《礼记》中也有:"婉娩听从。"可见,在中西方传统男权社会文化下,女性都被要求顺服,成为男性的附属物,甚至被"物化"。而随着后世女性的觉醒和独立,中西方都诞生了以女性解放和女性婚姻为题材的文学作品。其中,以易卜生的《玩偶之家》和鲁迅的《伤..

    2025-10-19
  • 商业之最

    重新定义的力量:当旧物焕新,企业如何破茧重生?

    “创新已死?”当无数企业将巨额资金投入研发中心,追逐下一个“全新”概念时,市场的回应却往往是冰冷的沉默。我们站在堆积如山的专利文件前,困惑着:为何创新的投入与回报之间,横亘着如此巨大的鸿沟?乔布斯曾一针见血地指出:“创新不是发明新东西,而是重新定义旧东西。”这并非否定发明的价值,而是揭示了创新的另一..

    2025-10-15
  • 世界最重

    美国肥胖率40%,韩国34.4%!中国作为第一人口大国,数据令人意外

    4亿人的体重竟然能拖垮国家经济!这听起来像天方夜谭,但数字摆在眼前时,所有人都震惊了。我国超重和肥胖人数已经超过4亿,这个数字意味着什么?平均每3个成年人中就有1个体重超标。更让人意外的是,我们已经超越美国,成为全球肥胖人口最多的国家。最新公布的数据显示,全国肥胖率最高的10个省份,医疗支出占GDP的比重比..

    2025-10-15
  • 排行榜

    【数据】2025最具价值中国品牌100强发布,大快消品牌占三分之一

    (快消品讯)2025年9月16日,2025凯度BrandZ最具价值中国品牌百强榜十五周年庆典以“新智品牌力”为主题在上海举行,现场正式发布《2025凯度BrandZ最具价值中国品牌100强》榜单(下称“品牌百强榜单”)及完整报告,其中大快消品牌34家。1茅台入围最具价值中国品牌年度十强报告显示,2025 年品牌百强榜单总价值高达 1.21 万..

    2025-10-14

微信分享

微信分享二维码

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

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