当前位置:首页 » 存储配置 » 图的存储结构

图的存储结构

发布时间: 2022-01-28 20:15:39

㈠ 图的建立及输出 任务:建立图的存储结构(图的类型可以是有向图、无向图、有向网、无向网,学生可以任选两

可以用数组存储,数组就是一个N*N的矩阵呗,a[m][n]就表示点m和n间的距离呗,0就表示没连线
也可以用链表存储

㈡ 关于数据结构中图的储存方式的选择

首先你要明白,邻接链表存图的空间复杂度与图中边的数量有关(O(N+E) E表示图中边的数目),而数组存图空间复杂度与点数有关(O(N^2)N表示点数)
看点的数量,如果点的数量不是很大(比如几百个左右或者更小)那么二者都可以选择。
如果点的数量过大的话,用数组存储稀疏图会造成大量的空间浪费,此时选择使用邻接表更好。

㈢ 图的存储结构有哪些

最常见的:
顺序查找:适合顺序结构和链式结构
二分查找:适合顺序结构

其他的二叉查找树、B-树之类有自己的数据结构

㈣ 请教关于位图数据存储结构

正常情况下数据块大小应该是480000字节,不知道PS为什么这样做,多写了2个字节0。其实这两个字节去掉并不影响图像的显示。

不要用这个来研究位图结构,这是一个特殊情况。如果你用画图保存一个400*400的24位位图,就是480000字节。

其实数据区中可以多出任意字节的数据,但位图显示时只取前面宽*高的有效字节数,你可以实际试一下。 有的时候可以用这个原理在图像文件中隐藏一些其他数据。

㈤ 图的两种存储结构是什么

二楼说错了,方向有误。
这两个分别叫剖面符号和断面符号,他们剖段的方向都是纵向的,观察的方向是指向数字的方向,从网页上来看,就是L1是从左往右,而1┃则表示从右往左看。

这两种符号的区别是断面图与剖面图的区别在于:
断面图只画形体被剖开后断面的投影,而剖面图要画出形体被剖开后整个余下部分的投影如图。

1)剖面图是形体剖切之后剩下部分的投影,是体的投影。断面图是形体剖切之后断面的投影,是面的投影。 剖面图中包含断面图。

2)剖面图用剖切位置线、投射方向线和编号来表示。断面图则只画剖切位置线与编号,用编号的注写位置来代表投射方向。

3)剖面图可用两个或两个以上的剖切平面进行剖切,断面图的剖切平面通常只能是单一的。

㈥ 图的存储结构有多少种

主要的吧:
邻接矩阵、邻接表
无向图的邻接多重表
有向图的十字链表

㈦ 图的存储结构——所存储的信息有哪些

一、邻接矩阵存储方法

邻接矩阵是表示顶点之间相邻关系的矩阵。

设G=(V,E)是具有n(n>0)个顶点的图,顶点的顺序依次为0~n-1,则G的邻接矩阵A是n阶方阵,其定义如下:

(1)如果G是无向图,则:

A[i][j]=1:若(i,j)∈E(G) 0:其他

(2)如果G是有向图,则:

A[i][j]=1:若<i,j>∈E(G) 0:其他

(3)如果G是带权无向图,则:

A[i][j]= wij :若i≠j且(i,j)∈E(G) 0:i=j ∞:其他

(4)如果G是带权有向图,则:

A[i][j]= wij :若i≠j且<i,j>∈E(G) 0:i=j∞:其他

注意:带权图和不带权图表示的元素类型不同。


带权图(不论有向还是无向图)A[i][j]用double表示,不带权图(不论有向还是无向图)A[i][j]用int表示。

用一维数组G[ ]存储有4个顶点的无向图如:G[ ] = { 0, 1, 0, 1, 1, 0, 0, 0, 1, 0 }

则顶点2和顶点0之间是有边的。

如:

邻接矩阵的特点如下:

(1)图的邻接矩阵表示是唯一的。

(2)无向图的邻接矩阵一定是一个对称矩阵。因此,按照压缩存储的思想,在具体存放邻接矩阵时只需存放上(或下)三角形阵的元素即可。

(3)不带权的有向图的邻接矩阵一般来说是一个稀疏矩阵。因此,当图的顶点较多时,可以采用三元组表的方法存储邻接矩阵。

(4)对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点的度。

(5)对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点的出度(或入度)。

(6)用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。这是用邻接矩阵存储图的局限性。

邻接矩阵的数据类型定义如下:

#define MAXV <最大顶点个数>

typedef struct

{ int no; //顶点编号

InfoType info; //顶点其他信息

} VertexType; //顶点类型

typedef struct //图的定义

{ int edges[MAXV][MAXV]; //邻接矩阵

int n,e; //顶点数,弧数

VertexType vexs[MAXV]; //存放顶点信息

} MGraph; //图的邻接矩阵表示类型


二、 邻接表存储方法

图的邻接表存储方法是一种顺序分配与链式分配相结合的存储方法。

在邻接表中,对图中每个顶点建立一个单链表,第i个单链表中的节点表示依附于顶点i的边(对有向图是以顶点i为尾的边)。每个单链表上附设一个表头节点。

其中,表节点由三个域组成,adjvex指示与顶点i邻接的点在图中的位置,nextarc指示下一条边或弧的节点,info存储与边或弧相关的信息,如权值等。

表头节点由两个域组成,data存储顶点i的名称或其他信息,firstarc指向链表中第一个节点。

typedef struct ANode

{ int adjvex; //该边的终点编号

struct ANode *nextarc; //指向下一条边的指针

InfoType info; //该边的相关信息

} ArcNode; //边表节点类型


typedef struct Vnode

{ Vertex data; //顶点信息

ArcNode *firstarc; //指向第一条边

} VNode; //邻接表头节点类型

typedef VNode AdjList[MAXV]; //AdjList是邻接表类型

typedef struct

{ AdjList adjlist; //邻接表

int n,e; //图中顶点数n和边数e

} ALGraph; //完整的图邻接表类型


邻接表的特点如下:

(1)邻接表表示不唯一。这是因为在每个顶点对应的单链表中,各边节点的链接次序可以是任意的,取决于建立邻接表的算法以及边的输入次序。

(2)对于有n个顶点和e条边的无向图,其邻接表有n个顶点节点和2e个边节点。显然,在总的边数小于n(n-1)/2的情况下,邻接表比邻接矩阵要节省空间。

(3)对于无向图,邻接表的顶点i对应的第i个链表的边节点数目正好是顶点i的度。

(4)对于有向图,邻接表的顶点i对应的第i个链表的边节点数目仅仅是顶点i的出度。其入度为邻接表中所有adjvex域值为i的边节点数目。

例, 给定一个具有n个节点的无向图的邻接矩阵和邻接表。

(1)设计一个将邻接矩阵转换为邻接表的算法;

(2)设计一个将邻接表转换为邻接矩阵的算法;

(3)分析上述两个算法的时间复杂度。

解:

(1)在邻接矩阵上查找值不为0的元素,找到这样的元素后创建一个表节点并在邻接表对应的单链表中采用前插法插入该节点。

void MatToList(MGraph g,ALGraph *&G)

//将邻接矩阵g转换成邻接表G

{ int i,j,n=g.n; ArcNode *p; //n为顶点数

G=(ALGraph *)malloc(sizeof(ALGraph));

for (i=0;i<n;i++) //给所有头节点的指针域置初值

G->adjlist[i].firstarc=NULL;

for (i=0;i<n;i++) //检查邻接矩阵中每个元素

for (j=n-1;j>=0;j--)

if (g.edges[i][j]!=0)

{ p=(ArcNode *)malloc(sizeof(ArcNode));

//创建节点*p

p->adjvex=j;

p->nextarc=G->adjlist[i].firstarc;

//将*p链到链表头

G->adjlist[i].firstarc=p;

}

G->n=n;G->e=g.e;


}


(2)在邻接表上查找相邻节点,找到后修改相应邻接矩阵元素的值。

void ListToMat(ALGraph *G,MGraph &g)

{ int i,j,n=G->n;ArcNode *p;

for (i=0;i<n;i++)

{ p=G->adjlist[i].firstarc;

while (p!=NULL)

{ g.edges[i][p->adjvex]=1;

p=p->nextarc;

}

}

g.n=n;g.e=G->e;

}


(3)算法1的时间复杂度均为O(n2)。算法2的时间复杂度为O(n+e),其中e为图的边数。

㈧ 8. 邻接表是图的一种( )。 A. 顺序存储结构 B. 链式存储结构 C. 索引存储结构 D. 散列存储结构

随机存取才对。顺序存储结构的地址在内存中是连续的所以可以通过计算地址实现随机存取,而链式存储结构的存储地址不一定连续,只能通过逐个结点的指针顺序存取。不可望文生义。

㈨ 图的存储结构是什么

由于图的结构比较复杂,任意两个顶点之间都可能存在关系(边),无法通过存储位置表示这种任意的逻辑关系,所以,图无法采用顺序存储结构。这一点同其他数据结构(如线性表、树)不同。考虑图的定义,图是由顶点和边组成的,所以,分别考虑如何存储顶点和边。图常用的存储结构有邻接矩阵、邻接表、十字链表和邻接多重表。

热点内容
c语言中的unsignedchar 发布:2024-09-22 13:11:12 浏览:167
最好的加密移动硬盘 发布:2024-09-22 12:35:58 浏览:156
c语言编程贪吃蛇 发布:2024-09-22 12:34:21 浏览:745
青椒云电脑什么配置 发布:2024-09-22 12:24:50 浏览:279
pythongbkunicode 发布:2024-09-22 12:24:06 浏览:992
空调压缩机保险在哪里 发布:2024-09-22 12:18:01 浏览:364
笔记本配置看哪些 发布:2024-09-22 12:06:41 浏览:857
魔兽地图脚本制作 发布:2024-09-22 12:04:48 浏览:800
算法衰减 发布:2024-09-22 11:58:42 浏览:50
抖音安卓机客服中心在哪里 发布:2024-09-22 11:58:40 浏览:358