数据结构图的基本概念和存储结构.ppt
- 文档编号:1726598
- 上传时间:2022-10-23
- 格式:PPT
- 页数:63
- 大小:1.22MB
数据结构图的基本概念和存储结构.ppt
《数据结构图的基本概念和存储结构.ppt》由会员分享,可在线阅读,更多相关《数据结构图的基本概念和存储结构.ppt(63页珍藏版)》请在冰豆网上搜索。
图和图的存储结构,图的定义和术语,图的存储表示,小结和作业,创建图,课堂练习,图和图的存储结构,1.图的结构定义,2.图的名词和术语,3.图的基本操作,图的结构定义,谓词P(v,w)定义了弧的意义或信息。
图是由一个顶点集V和一个弧集R构成的数据结构。
Graph=(V,R)R|v,wV且P(v,w),表示从v到w的一条弧(Arc),称v为弧尾(tail),w为弧头(head)。
图的结构定义有向图,如果“弧”是有方向的,则称由顶点集和弧集构成的图为有向图。
例如:
G1=(V1,R1),V1=A,B,C,D,E,R1=,图的结构定义无向图,若R必有R,则以无序对(v,w)代替这两个有序对,称(v,w)为顶点v和顶点w之间存在一条边。
上述这种由顶点集和边集构成的图称作无向图。
图的结构定义无向图,例如:
G2=(V2,R2),V2=A,B,C,D,E,F,R2=(A,B),(A,E),(B,E),(B,F),(C,D),(C,F)(D,F,名词和术语,1)网、子图,2)完全图、稀疏图、稠密图,3)邻接点、度、入度、出度,4)路径、路径长度、简单路径、简单回路,5)连通图、连通分量、强连通图、强连通分量,6)生成树、生成森林,名词和术语,1)子图,设图G=(V,R)和图G=(V,R),且VV,RR,则称G为G的子图。
B,名词和术语,1)网,弧或边带权的图分别称作有向网或无向网。
15,9,7,21,11,3,2,名词和术语,2)完全图、稀疏图、稠密图,假设图中有n个顶点,e条边,则,含有e=n(n-1)/2条边的无向图称作完全图;,含有e=n(n-1)条弧的有向图称作有向完全图;,若边或弧的个数enlogn,则称作稀疏图,否则称作稠密图。
名词和术语,3)邻接点、度、入度、出度,邻接点:
假若顶点v和顶点w之间存在一条边,则称顶点v和w互为邻接点,,度:
和顶点v关联的边的数目,记为TD(V)。
边(v,w)和顶点v和w相关联。
名词和术语,3)邻接点、度、入度、出度,例如:
TD(B)=3,TD(A)=2,右侧图中的无向图,名词和术语,3)邻接点、度、入度、出度,顶点的出度:
以顶点v为弧尾的弧的数目;记为OD(v),对于右图所示的有向图来说,由于弧有方向性,则有入度和出度之分,名词和术语,3)邻接点、度、入度、出度,顶点的入度:
以顶点v为弧头的弧的数目,记为ID(v),顶点的度(TD)=出度(OD)+入度(ID),ID(B)=2,OD(B)=1,TD(B)=3,名词和术语,4)路径、路径长度、简单路径、简单回路,路径:
设图G=(V,R)中的一个顶点序列u=vi,0,vi,1,vi,m=w中,(vi,j-1,vi,j)R,1jm,则称从顶点u到顶点w之间存在一条路径。
路径长度:
路径上边的数目。
如:
从A到D长度为3的路径A,B,C,D,名词和术语,4)路径、路径长度、简单路径、简单回路,简单路径:
指序列中顶点不重复出现的路径。
简单回路:
指序列中第一个顶点和最后一个顶点相同的路径。
名词和术语,5)连通图、连通分量、强连通图、强连通分量,连通图:
若无向图G中任意两个顶点之间都有路径相通,则称此图为连通图;,名词和术语,5)连通图、连通分量、强连通图、强连通分量,连通分量:
若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量。
名词和术语,5)连通图、连通分量、强连通图、强连通分量,强连通图:
若有向图任意两个顶点之间都存在一条有向路径,则称为强连通图。
否则,其各个强连通子图称作它的强连通分量。
名词和术语,6)生成树、生成森林,连通图的生成树:
是一个极小连通子图,它含有图中的全部顶点,但只有足以构成一棵树的n-1条边。
名词和术语,6)生成树、生成森林,生成森林:
对非连通图,则称由各个连通分量的生成树的集合为此非连通图的生成森林。
基本操作,1.结构的建立和销毁,3.插入或删除顶点,5.对邻接点的操作,2.对顶点的访问操作,6.遍历,4.插入和删除弧,基本操作,CreatGraph(&G,V,R):
/按定义(V,R)构造图,DestroyGraph(&G):
/销毁图,1.结构的建立和销毁,基本操作,2.对顶点的访问操作,LocateVex(G,u);/若G中存在顶点u,则返回该顶点在/图中“位置”;否则返回其它信息。
GetVex(G,v);/返回v的值。
PutVex(/对v赋值value。
基本操作,3.插入或删除顶点,InsertVex(/在图G中增添新顶点v。
DeleteVex(/删除G中顶点v及其相关的弧。
基本操作,4.插入和删除弧,InsertArc(/在G中增添弧,若G是无向的,/则还增添对称弧。
DeleteArc(/在G中删除弧,若G是无向的,/则还删除对称弧。
基本操作,5.对邻接点的操作,FirstAdjVex(G,v);/返回v的“第一个邻接点”。
若该顶点/在G中没有邻接点,则返回“空”。
NextAdjVex(G,v,w);/返回v的(相对于w的)“下一个邻接/点”。
若w是v的最后一个邻接点,则/返回“空”。
基本操作,6.遍历,DFSTraverse(G,v,Visit();/从顶点v起深度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。
BFSTraverse(G,v,Visit();/从顶点v起广度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。
一、图的数组(邻接矩阵)存储表示,二、图的邻接表存储表示,三、有向图的十字链表存储表示,四、无向图的邻接多重表存储表示,图的存储表示,图的存储表示-邻接矩阵,定义:
矩阵的元素为,无向图:
对称矩阵,图的存储表示-邻接矩阵,有向图的邻接矩阵为非对称矩阵,图的存储表示-邻接矩阵,#defineINFINITYINT_MAX/最大值,#defineMAX_VERTEX_NUM20/最大顶点个数,TypedefenumDG,DN,UDG,UDNGraphKind/有向图,有向网,无向图,无向网,图的存储表示-邻接矩阵,typedefstructArcCell/弧的定义VRTypeadj;/VRType是顶点关系类型。
/对无权图,用1或0表示相邻否;/对带权图,则为权值类型。
InfoType*info;/该弧相关信息的指针ArcCell,图的存储表示-邻接矩阵,typedefstruct/图的定义VertexTypevexsMAX_VERTEX_NUM;/顶点信息ArcCellarcsMAX_VERTEX_NUMMAX_VERTEX_NUM;/弧的信息intvexnum,arcnum;/顶点数,弧数GraphKindkind;/图的种类标志MGraph;,图的存储表示-邻接表,1)无向图的邻接表,图的存储表示-邻接表,2)有向图的邻接表-每个顶点链接的是以该顶点为弧尾的弧,但是,在有向图的邻接表中不易找到指向该顶点的弧,图的存储表示-邻接表,3)有向图的逆邻接表-每个顶点链接的是指向该顶点的弧,图的存储表示-邻接表,邻接表:
图的链式存储结构,对图中每个顶点建立一个单链表,第i个单链表中的结点表示依附顶点Vi的边。
对有向图来说,是指以顶点Vi的为弧尾的弧。
图的存储表示-邻接表,邻接表:
图的链式存储结构,adjvex,nextarc,info,邻接点域,链域,数据域(存放权值等),表结点:
头结点:
data,firstarc,数据域,链域,指向链表中第一个结点,弧结点,顶点结点,图的存储表示-邻接表,图的邻接表:
1、容易找到任意顶点的一个邻接点2、但是要判定任意两个顶点(vi,vj)之间是否有边或者弧相连,需要搜索第i个或者第j个链表,不如邻接矩阵方便。
图的存储表示-有向图的十字链表,012,图的存储表示-有向图的十字链表,指向下一个有相同弧尾的结点,指向下一个有相同弧头的结点,tailvex,headvex,hlink,tlink,info,弧的结点结构,弧的结点结构表示,typedefstructArcBox/弧的结构表示inttailvex,headvex;InfoType*info;structArcBox*hlink,*tlink;ArcBox;,图的存储表示-有向图的十字链表,顶点的结点结构表示,typedefstructVexNode/顶点的结构表示VertexTypedata;ArcBox*firstin,*firstout;VexNode;,图的存储表示-有向图的十字链表,十字链表,图的存储表示-有向图的十字链表,typedefstructVexNodexlistMAX_VERTEX_NUM;/顶点结点(表头向量)intvexnum,arcnum;/有向图的当前顶点数和弧数OLGraph;,无向图的邻接多重表存储表示,markivexilinkjvexjlink,无向图的邻接多重表存储表示,typedefstructEboxVisitIfmark;/访问标记intivex,jvex;/该边依附的两个顶点的位置structEBox*ilink,*jlink;InfoType*info;/该边信息指针EBox;,边的结构表示,无向图的邻接多重表存储表示,顶点的结构表示,typedefstructVexBoxVertexTypedata;EBox*firstedge;/指向第一条依附该顶点的边VexBox;,无向图的邻接多重表存储表示,typedefstruct/邻接多重表VexBoxadjmulistMAX_VERTEX_NUM;intvexnum,edgenum;AMLGraph;,无向图的结构表示,创建图,输入边形式1:
.,输入边形式2:
.,输入顶点:
ABC.,1、输入参数:
vexnum,arcnum,GraghKind,2、输入顶点信息,3、根据GraghKind,决定边是否要带权重,4、采用某种形式逐条输入边,将它插入到存储结构中,建立存储结构的一般步骤:
创建图,StatusCreateGragh(ALGraph,创建图,StatusCreateDG(ALGraphG.verticesi.data=data/输入顶点信息,创建图,StatusCreateDG(ALGraph/添加到最左边,创建图,时间复杂度分析(第2种输入形式)第1个for:
n第2个for:
e所以O(n+e),时间复杂度分析(第1种输入形式)第1个for:
n第2个for:
n.e所以O(n.e),创建图,存储结构的转换,StatusTranslateDG(ALGraphG1,MGraph,StatusTranlateDG(ALGraphG1,MGraph,存储结构的转换,StatusTranlateDG(ALGraphG1,MGraph,存储结构的转换,课堂练习,V1,V2,V3,V4,V5,1、邻接矩阵,2、邻接表,3、邻接多重表,V2,V1,V4,V3,1、邻接矩阵,2、邻接表,3、十字链表,课堂练习,下面关于图的存储的叙述中正确的是()A)用相邻矩阵法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关B)用相邻矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关C)用邻接表法存储图,占用的存储空间大小只与图中结点个数有关,而与边数无关D)用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关,课堂练习,小结和作业,1.图的基本概念以及图的特点,2.图的存储表示:
1.图的数组(邻接矩阵)存储表示,2.图的邻接表存储表示,3.有向图的十字链表存储表示,4.无向图的邻接多重表存储表示,3.创建图,小结和作业,作业:
7.1(2,3,4)、7.3注意:
书上答案有问题将节点中的1,2,3,4,5,6改成V1,V2,V3V4,V5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构图 基本概念 存储 结构