图的存储结构邻接矩阵表示法

合集下载

图-存储结构-数组表示法(邻接矩阵)

图-存储结构-数组表示法(邻接矩阵)

图-存储结构-数组表⽰法(邻接矩阵)⽂字描述 ⽤两个数组分别存储顶点信息和边/弧信息。

⽰意图算法分析 构造⼀个采⽤邻接矩阵作存储结构、具有n个顶点和e条边的⽆向⽹(图)G的时间复杂度是(n*n + e*n), 其中对邻接矩阵G.arcs的初始化耗费了n*n的时间。

借助于邻接矩阵容易判定两个顶点之间是否有边/弧相连,并容易求得各个顶点的度。

对于⽆向图,顶点vi的度是邻接矩阵地i⾏(或第i列)的元素之和;对于有向图,第i⾏的元素之和为顶点vi的出度;第j列的元素之和为顶点vj的⼊度;代码实现1/*2以数组表⽰法(邻接矩阵)作为图的存储结构创建图。

3*/4 #include <stdio.h>5 #include <stdlib.h>6 #include <string.h>78#define INFINITY 100000 //最⼤值9#define MAX_VERTEX_NUM 20 //最⼤顶点数10 typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向⽹,⽆向图,⽆向⽹}11 typedef int VRType;12 typedef char VertexType;13 typedef struct{14char note[10];15 }InfoType;16 typedef struct ArcCell{17 VRType adj; //顶点关系类型:1)对⽆权图,⽤1或0表⽰相邻否;2)对带权图,则为权值类型18 InfoType *info; //该弧相关信息的指针19 }ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];20 typedef struct{21 VertexType vexs[MAX_VERTEX_NUM]; //顶点向量22 AdjMatrix arcs; //邻接矩阵23int vexnum, arcnum; //图的当前顶点数和弧数24 GraphKind kind; //图的种类标志25 }MGraph;2627/*28若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。

数据结构第7章-答案

数据结构第7章-答案

一、单选题C01、在一个图中,所有顶点的度数之和等于图的边数的倍。

A)1/2 B)1 C)2 D)4B02、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的倍。

A)1/2 B)1 C)2 D)4B03、有8个结点的无向图最多有条边。

A)14 B)28 C)56 D)112C04、有8个结点的无向连通图最少有条边。

A)5 B)6 C)7 D)8C05、有8个结点的有向完全图有条边。

A)14 B)28 C)56 D)112B06、用邻接表表示图进行广度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A07、用邻接表表示图进行深度优先遍历时,通常是采用来实现算法的。

A)栈 B)队列 C)树 D)图A08、一个含n个顶点和e条弧的有向图以邻接矩阵表示法为存储结构,则计算该有向图中某个顶点出度的时间复杂度为。

A)O(n) B)O(e) C)O(n+e) D)O(n2)C09、已知图的邻接矩阵,根据算法思想,则从顶点0出发按深度优先遍历的结点序列是。

A)0 2 4 3 1 5 6 B)0 1 3 6 5 4 2 C)0 1 3 4 2 5 6 D)0 3 6 1 5 4 2B10、已知图的邻接矩阵同上题,根据算法,则从顶点0出发,按广度优先遍历的结点序列是。

A)0 2 4 3 6 5 1 B)0 1 2 3 4 6 5 C)0 4 2 3 1 5 6 D)0 1 3 4 2 5 6D11、已知图的邻接表如下所示,根据算法,则从顶点0出发按深度优先遍历的结点序列是。

A)0 1 3 2 B)0 2 3 1 C)0 3 2 1 D)0 1 2 3A12、已知图的邻接表如下所示,根据算法,则从顶点0出发按广度优先遍历的结点序列是。

A)0 3 2 1 B)0 1 2 3 C)0 1 3 2 D)0 3 1 2A13、图的深度优先遍历类似于二叉树的。

A)先序遍历 B)中序遍历 C)后序遍历 D)层次遍历D14、图的广度优先遍历类似于二叉树的。

数据结构-期末复习题及参考答案+-+第7章图

数据结构-期末复习题及参考答案+-+第7章图

《数据结构》期末复习题及参考答案- 第7章图//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 注意:做复习题时,请结合阅读教材,钻研教材,参考课件////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////一、选择题1、以下数据结构中,哪种具有非线性结构?A.栈B.队列C.双向链表D.十字链表2、下面关于图的存储的叙述中正确的是()。

A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关。

B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关。

C.用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关。

D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关3、在图的邻接表存储结构上执行深度优先搜索遍历类似于二叉树上的()A.先根遍历B.中根遍历C.后根遍历D.按层次遍历4、图的广度优先遍历算法类似于树的()。

A. 中根遍历B. 先根遍历C. 后根遍历D. 按层次遍历5、设无向图的顶点个数为n,则该图最多有()条边。

A.n-1 B.n(n-1)/2 C.n(n+1)/2 D.06、设有n个结点的无向图,该图至少应有( )条边才能确保是一个连通图。

A.n-1 B.n C.n+1 D.nlogn;7、一个含有n个顶点的非连通图,则():A.它的边一定不大于n-1 B.它的边一定不大于nC.它的边一定小于n-1 D.它的边一定大于08、要连通具有n个顶点的有向图,至少需要()条边。

数据结构习题集和答案

数据结构习题集和答案

第1章绪论1、填空题1.常见的数据结构有集合,_线性__结构,__树形___结构,__图形__结构等四种。

2.常见的存储结构有__顺序存储_______结构,__链式存储____结构等两种。

3.数据的基本单位是_数据元素___,它在计算机中是作为一个整体来处理的。

4.数据结构中的结构是指数据间的逻辑关系,常见的结构可分为两大类,__线性结构____和__非线性结构___。

2、选择题1. 算法的计算量的大小称为计算的(B)。

A.效率 B. 复杂性 C. 现实性 D. 难度2. 算法的时间复杂度取决于(C)A.问题的规模 B. 待处理数据的初态 C. A和B D. 以上都不对3.计算机算法指的是(1)(c),它必须具备(2)(B)这三个特性。

(1) A.计算方法 B. 排序方法 C. 解决问题的步骤序列 D. 调度方法(2) A.可执行性、可移植性、可扩充性 B. 可执行性、确定性、有穷性C. 确定性、有穷性、稳定性D. 易读性、稳定性、安全性4. 下面关于算法说法错误的是(D)A.算法最终必须由计算机程序实现B.为解决某问题的算法同为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的3、应用题1、给出以下算法的时间复杂度.void fun(int n){int i=1,k=100;while(i<n){k=k+1;i=i+2;}}时间复杂度为____O(n)_____。

2、给出以下算法的时间复杂度.void fun2(int n){int i=1,k=100;while(i<n){i=i*10;k=k+1;}}时间复杂度为____O(log n)___________。

第2章线性表1、填空题1. 线性表按照存储结构不同主要有两种实现方式,一种是__顺序_表,另一种是___链___表。

2.顺序表采用__随机___访问机制对数据元素进行访问。

3.若在单链表结点p的后面插入一个新的结点s,则其操作序列为:①____s->next=p->next_____________;②____p->next=s___________________;4.在单向链表中,若要删除某个结点p,一般要找到__p的前趋__结点,才能实现该操作。

数据结构-chap7 (1)图的存储结构

数据结构-chap7 (1)图的存储结构
有序对<vi,vj> : 用以vi为起点、以vj为终点 的有向线段表示, 称为有向边或弧。
V2
V4 G2图示
无向图:在图G中,若所有边是无向边,则称G为无向图。
有向图:在图G中,若所有边是有向边,则称G为有向图。
二、图的基本术语
有向完全图: n个顶点的有向图最大边数是n(n-1) 无向完全图: n个顶点的无向图最大边数是n(n-1)/2 1、邻接点及关联边
主要内容

知识点
– – – – 1.图的定义,概念、术语及基本操作。 2.图的存储结构,特别是邻接矩阵和邻接表。 3.图的深度优先遍历和宽度优先遍历。 4.图的应用(连通分量,最小生成树,拓扑排序,关键路经,最短 路经)。 1.基本概念中,完全图、连通分量、生成树和邻接点是重点。 2.建立图的各种存储结构的算法。 3.图的遍历算法及其应用。 4.通过遍历求出连通分量的个数,深(宽)度优先生成树。 5.最小生成树的生成过程。 6.拓扑排序的求法。关键路经的求法。 7.最短路径的手工模拟。
自测题 2
设无向图的顶点个数为n,则该图最多有( )条边。 A.n-1
B.n(n-1)/2
C.n(n+1)/2 D.0 E.N2 【清华大学1998一.5(分)】
自测题 3
一个有n个结点的图,最少有( )个连通分量,最多有( )个 连通分量。
A. 0
B.1 C.n-1 D.n 【北京邮电大学 2000 二.5 (20/8分)】
0
V1 e1 V3 V4 V5 V2 1 0 1 0 1
否则
0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 V1 V2 0 1 1 0 0 0 0 0 0 1 0 0 0 0 1 0

《数据结构》实验指导书

《数据结构》实验指导书
四、实验说明
1.单链表的类型定义
#include <stdio.h>
typedef int ElemType;//单链表结点类型
typedef struct LNode
{ElemType data;
struct LNode *next;
2.明确栈、队列均是特殊的线性表。
3.栈、队列的算法是后续实验的基础(广义表、树、图、查找、排序等)。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验四 串
一、预备知识
1.字符串的基本概念
2.字符串的模式匹配算法
二、实验目的
1.理解字符串的模式匹配算法(包括KMP算法)
typedef struct
{ElemType *base;
int front,rear;
} SqQueue;
4.单链队列的类型定义
typedef struct QNode
{QElemType data;
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.三元组表是线性表的一种应用,通过它可以更好地理解线性表的存储结构。同时矩阵又是图的重要的存储方式,所以这个实验对更好地掌握线性表对将来对图的理解都有极大的帮助。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验六 树和二叉树
一、预备知识
1.二叉树的二叉链表存储结构

数据结构课程设计-图的邻接矩阵

数据结构课程设计-图的邻接矩阵

数据结构课程设计报告设计题目:图的邻接矩阵存储结构院系计算机学院年级x 级学生xxxx学号xxxxxxxxxx指导教师xxxxxxxxx起止时间10-6/10-102013年10月10日目录1 需求分析 (3)2 概要设计 (4)2.1 ADT描述 (4)2.2程序模块结构 (5)2.3各功能模块 (6)3详细设计 (7)3.1类的定义 (7)3.2 初始化 (8)3.3 图的构建操作 (8)3.4 输出操作 (9)3.5 get操作 (9)3.6 插入操作 (10)3.7 删除操作 (10)3.8 求顶点的度操作 (11)3.10 判断连通操作 (12)3.11 主函数 (13)4 调试分析 (16)4.1调试问题 (16)4.2 算法时间复杂度 (16)5用户手册 (16)5.1 主界面 (16)5.2 创建图 (17)5.3插入节点 (17)5.4 深度优先遍历 (17)5.5 求各顶点的度 (18)5.6 输出图 (18)5.7 判断是否连通 (19)5.8 求边的权值 (19)5.9 插入边 (19)5.10 删除边 (20)结论 (20)参考文献 (20)摘要随着计算机的普及,涉及计算机相关的科目也越来越普遍,其中数据结构是计算机专业重要的专业基础课程与核心课程之一,为适应我国计算机科学技术的发展和应用,学好数据结构非常必要,然而要掌握数据结构的知识非常难,所以对“数据结构”的课程设计比不可少。

本说明书是对“无向图的邻接矩阵存储结构”课程设计的说明。

首先是对需求分析的简要阐述,说明系统要完成的任务和相应的分析,并给出测试数据。

其次是概要设计,说明所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次关系,以及ADT描述。

然后是详细设计,描述实现概要设计中定义的基本功操作和所有数据类型,以及函数的功能及代码实现。

再次是对系统的调试分析说明,以及遇到的问题和解决问题的方法。

然后是用户使用说明书的阐述,然后是测试的数据和结果的分析,最后是对本次课程设计的结论。

邻接矩阵的基本操作

邻接矩阵的基本操作

邻接矩阵的基本操作
首先,创建邻接矩阵是指根据图的节点和边的信息构建邻接矩阵。

通常情况下,我们可以使用二维数组来表示邻接矩阵,数组的行和列分别对应图中的节点,而数组中的元素则表示节点之间的连接关系。

如果节点i和节点j之间有边相连,则邻接矩阵中第i行第j列的元素为1,否则为0。

其次,查询邻接关系是指根据邻接矩阵来确定图中节点之间的连接关系。

通过访问邻接矩阵中的特定元素,我们可以判断两个节点之间是否存在边相连,从而确定它们的邻接关系。

另外,添加节点和删除节点也是邻接矩阵的基本操作之一。

当需要向图中添加新节点时,我们可以扩展邻接矩阵的行和列,并根据新的节点信息来更新邻接矩阵。

而当需要删除节点时,我们可以删除邻接矩阵中与该节点相关的行和列,同时调整其他节点的索引以保持邻接矩阵的正确性。

除了上述基本操作外,邻接矩阵还可以进行其他操作,如修改边的权重、遍历邻接矩阵以获取特定信息等。

总之,邻接矩阵是一种非常实用的图表示方法,在实际应用中有着广泛的用途。

通过合
理地运用邻接矩阵的基本操作,我们可以对图进行高效地管理和分析。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Βιβλιοθήκη V且E′11
1
1
E, 则称图G′
2
3
3
1
1
2
3 5
4
3
4
(a) G 1的 子 图
1
2
1
2
3
4
5
4
5
(b) G 2的 子 图 图7.2 图的子图示例
3. 邻接点 对于无向图 G=(V, {E}),如果边(v,v′)∈E, 则称顶点v, v′互为邻 接点,即v, v′相邻接。边(v, v′)依附于顶点v和v′,或者说边(v, v′)与顶 点v和v′相关联。 对于有向图G=(V, {A})而言,若弧<v,v′>∈A, 则称顶点v邻接到顶点 v′,顶点v′邻接自顶点v,或者说弧<v, v′>与顶点v和v′相关联。
7.1 图的定义与基本术语
7.1.1 图的定义
图(Graph)是一种网状数据结构, 其形式化定义如下: Graph=(V,R) V={x|x∈DataObject}
R={VR} VR={<x, y>|P(x, y)∧(x, y∈V)} DataObject为一个集合,该集合中的所有元素具有相同的特性。V中的数据元 素通常称为顶点(vertex),VR是两个顶点之间关系的集合。P(x,y)表示x和y 之间有特定的关联属性P。
n
TD(vi )
e i1 2
5.
在实际应用中,有时图的边或弧上往往与具有一定意义的数有关,即每一条边 都有与它相关的数,称为权,这些权可以表示从一个顶点到另一个顶点的距离或 耗费等信息。我们将这种带权的图叫做带权图或网,如图7.3所示。
16
1
2
21
11
5
19
6
6
3
33 14
6
5
4
18
图7.3 带权图示例
(7) InsertVertex(G, u):在图G中增加一个顶点u。
(8) DeleteVertex(G, v):删除图G的顶点v及与顶点v相关联的弧。 (9) InsertArc(G, v, w):在图G中增加一条从顶点v到顶点w的弧。
(10) DeleteArc(G, v, w): 删除图G中从顶点v到顶点w的弧。 (11) TraverseGraph(G): 按照某种次序, 对图G的每个结点访问一次且仅 访问一次。
(4) GetVertex(G, i): 取出图G中的第i个顶点的值。 若i大于图G中顶点数, 则函数值为“空”。
(5) FirstAdjVertex(G,v):求图G中顶点v的第一个邻接点。 若v无邻接点 或图G中无顶点v,则函数值为“空”。
(6) NextAdjVertex(G,v,w):已知w是图G中顶点v的某个邻接点,求顶点 v的下一个邻接点(紧跟在w后面)。 若w是v的最后一个邻接点, 则函数值为 “空”。
7.1.2 基本术语 1. 完全图、稀疏图与稠密图 我们设n表示图中顶点的个数,用e表示图中边或弧的数目, 并且不考虑图中每个 顶点到其自身的边或弧。即若<vi,vj>∈VR, 则vi≠vj。
对于无向图而言,其边数e的取值范围是0~n(n-1)/2。 我们称有n(n-1)/2条边 (图中每个顶点和其余n-1个顶点都有边相连)的无向图为无向完全图。
G1
1
2
3
4
(a) G 1是 有 向 图
G2
1
2
3
4
5
(b) G 2是 无 向 图
图7.1 图的示例
图 7.1
ADT Graph 数据对象V: 一个集合,该集合中的所有元素具有相同的特性。 数据关系R:R={VR}
VR={<x,y>|P(x,y)∧(x, y∈V)} 基本操作: (1) CreateGraph(G): 创建图G。 (2) DestoryGraph(G): 销毁图G。 (3) LocateVertex(G, v):确定顶点v在图G中的位置。 若图G中没有顶点v, 则函数值为“空”。
图 7.3
6. 无向图G=(V,{E})中从顶点v到v′的路径是一个顶点序列vi0, vi1,vi2,…, vin,其中(vij-1,vij)∈E,1≤j≤n。如果图G是有向图,则路径也是有向的,顶点 序列应满足<vij-1,vij>∈A, 1≤j≤n。路径的长度是指路径上经过的弧或边的数目。 在一个路径中,若其第一个顶点和最后一个顶点是相同的,即v=v′,则称该路径为 一个回路或环。若表示路径的顶点序列中的顶点各不相同,则称这样的路径为简 单路径。除了第一个和最后一个顶点外,其余各顶点均不重复出现的回路为简单 回路。
对于有向图而言,其边数e的取值范围是0~n(n-1)。 我们称有n(n-1)条边 (图中每个顶点和其余n-1个顶点都有弧相连)的有向图为有向完全图。
对于有很少条边的图(e<n logn)称为稀疏图, 反之称为稠密图。
2.
设有两个图G=(V,{E})和图G′=(V′,{E′}), 若V′
为G的子图。
4. 度、入度和出度 对于无向图而言,顶点v 的度是指和v相关联边的数目,记作(v)。例如:图 7.1中G2中顶点v3的度是3,v1的度是2; 在有向图中顶点v的度有出度和入度两部分,其中以顶点v为弧头的弧的数目成 为该顶点的入度,记作ID(v),以顶点v为弧尾的弧的数目称为该顶点的出度,记 作OD(v),则顶点v的度为TD(v)=ID(v)+ OD(v)。例如: 图G1中顶点v1的入 度是ID(v1)=1,出度OD(v1)=2,顶点v1的度TD(v1)=ID(v1)+OD(v1)=3。一般地, 若图G 中有n个顶点,e条边或弧,则图中顶点的度与边的关系如下:
若<x,y>∈VR,则<x, y>表示从顶点x到顶点y的一条弧(arc),并称x为弧 尾(tail)或起始点,称y为弧头(head)或终端点,此时图中的边是有方向的,称 这样的图为有向图。
若<x, y>∈VR, 必有<y, x>∈VR,即VR是对称关系,这时以无序对(x, y)来代替两个有序对,表示x和y之间的一条边(edge),此时的图称为无向图。
7.
在无向图G=(V,{E})中,若从vi到vj有路径相通,则称顶点vi与vj是连通的。 如果对于图中的任意两个顶点vi、vj∈V,vi,vj都是连通的,则称该无向图G为连通 图。例如:G2就是连通图。无向图中的极大连通子图称为该无向图的连通分量。 在有向图G=(V,{A})中,若对于每对顶点vi、vj∈V且vi≠vj, 从vi到vj和vj到vi都 有路径,则称该有向图为强连通图。有向图的极大强连通子图称作有向图的强连通 分量,如图7.4所示。
相关文档
最新文档