第6章 图—数据结构

合集下载

计算机导论-第6章 数据结构

计算机导论-第6章 数据结构
⑴集合结构。在集合结构中,数据元素间的关系是“属于 同一个集合”。集合是元素关系极为松散的一种结构。
单击此处添课程名 ⑵线性结构。该结构的数据元素之间存在着一对一的关系。
⑶树型结构。该结构的数据元素之间存在着一对多的关系。
⑷图型结构。该结构的数据元素之间存在着多对多的关系, 图形结构也称作网状结构。
具有特殊的意义,称为栈顶。相应地,表尾 称为栈底。不含任何元素的栈称为空栈。
2. 栈的数学性质
假设一个栈S中的元素为an,an-1,..,a1,则 称a1为栈底元素,an为栈顶元 素。栈中的
元 时素 候按 ,单出a ,a栈击2,的..此,元an素-处1,都an添是的栈次课顶序程元进素栈名。。换在句任话何
第六章 数单据击结此构处添课程名
第6章 数据结构
• 数据结构是计算机软件和计算机应用专业的 核心课程之一,对于学习计算机专业的其他 课程,如操作系统、编译原理、数据库管理
系的统 。、 数软 据单件 结击工 构程主此、要处人研工究添智数能据课等表程都示是 与名十 存储分的有方益
法、抽象的逻辑结构及其上定义的各种基本 操作。数据的逻辑结构常常采用数学描述的 抽象符号和有关的理论。如使用串、表、数 组、图等结构和理论来表示数据在存储时的 逻辑结构,研究这些结构上定义的各种操作 。
本章内容
• 6.1 数据结构的概念 • 6.2 几种典型的数据结构 • 6.3 查找
• 6.4 单排序击此处添课程名
6.1 数据结构的概念
• 在系统地学习数据结构知识之前,先对一 些与数据结构相关的基本概念和术语赋予 确切的含义。
• 数 算机据单识(别D击at、a此)存是储处信和添息加的工课载处体理程,。名它它能是够计被算计机 程序加工的原料,应用程序处理各种各样 的数据。

数据结构(CC++语言版)第六章new

数据结构(CC++语言版)第六章new
为简单路径。
回路 若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路径
为回路或环。
路径长度
非带权图的路径长度是指此路径上边的条数。 带权图的路径长度是指路径上各边的权之和。
▪图的连通 在无向图G中,若两个顶点vi和vj之间有 路径存在,则称vi 和vj 是连通的。若G中任意两 个顶点都是连通的,则称G为连通图。非连通图的 极大连通子图叫做连通分量。
5 9
1
12
63
8
15
76
6
3
4
16
7
60
A
B 40 80 C
30
75
35
D
E
45
▪子图 设有两个图 G=(V, E) 和 G‘=(V’, E‘)。若 V’ V 且 E‘E, 则称 图G’ 是 图G 的子图。
路径 在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1,
种带权图叫做网。
▪生成树 一个连通图的生成树是它的极小 连通子图,在n个顶点的情形下,有n-1条 边。生成森林
不予讨论的图 包含顶点到其自身的边; 一条边在图中重复出现
6.2 图的存储结构
一. 图的数组表示法 (邻接矩阵表示法)
基本思想:
✓ 图需要存储的信息:顶点和弧。 ✓ 引入两个数组,一个记录各个顶点信息的顶点表,还
有一个表示各个顶点之间关系的邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图,则图的 邻接矩阵是一个二维数组 A.arcs[n][n],定义:
1 arcs[i][j] = 0
若<vi, vj> 或 (vi, vj) E 反之
2
1

数据结构第六章 哈夫曼树

数据结构第六章 哈夫曼树

6.3哈夫曼树6.3.1基本术语1.路径和路径长度若在一棵中存在着一个结点序列k1 ,k2,…,kj,使得ki是k1+i 的双亲(1ji<≤),则称此结点序列是从k1~kj的路径,因树中每个结点只有一个双亲结点,所以它也是这两个结点之间k 1~kj所经过的分支数称为这两点之间的路径长度,它等于路径上的结点数减1(实际就是边数)。

如在图5-19(a)所示的二叉树中,从树根结点L到叶子结点P的路径为结点序列L、M、S、P,路径长度为3。

(a) (b)(c) (d)图5-19 二叉排序树的删除2.结点的权和带权路径长度在许多应用中,常常将树中的结点赋上一个有着某种意义的实数,我们称此实数为该结点的权。

结点的带权路径长度规定为从树根结点到该结点之间的路径长度与该结点上权的乘积3.树的带权路径长度树的带权路径长度定义为树中所有叶子结点的带权路径长度这和,通常记为:2 WPL = ∑=n i i i lw 1其中n 表示叶子结点的数目,i w 和i l 分别表示叶子结点i k 的权值和根到i k 之间的路径长度 。

4.哈夫曼树哈夫曼(Huffman)树又称最优二叉树。

它是n 个带权叶子结点构成的所有二叉树中,带权路径长度 WPL 最小的二叉树。

因为构造这种树的算法是最早由哈夫曼于1952年提出的,所以被称之为哈夫曼树。

例如,有四个叶子结点a 、b 、c 、d ,分别带权为9、4、5、2,由它们构成的三棵不同的二叉树(当然还有其它许多种)分别如图5-20(a)到图5-20(c)所示。

b ac a b cd d c a b d(a) (b) (c)图5-20 由四个叶子结点构成的三棵不同的带权二叉树 每一棵二叉树的带权路径长度WPL 分别为:(a) WPL = 9×2 + 4×2 + 5×2 + 2×2 = 40(b) WPL = 4×1 + 2×2 + 5×3 + 9×3 = 50(c) WPL = 9×1 + 5×2 + 4×3 + 2×3 = 37其中图5-20(c)树的WPL 最小,稍后便知,此树就是哈夫曼树。

北邮数据结构第六章答案详解 图(1)

北邮数据结构第六章答案详解 图(1)

1
5
1
54 3
42
5 66
图 6-8 图 G 答案:根据不同算法构造的最小生成树如图 6-9 所示的图(a)和(b)
2

⑤ 5
1

4 3


6
2

③ 5
1

4 3


6
(a) Prim 生成树
(b) Kruskal 生成树
图 6-9 最小生成树
5、算法设计
(1)以邻接表为存储结构,设计实现深度优先遍历的非递归算法。
int top = -1; cout<<v<<’\t’; bVisited[v] = true; stack[++top] = v;
//访问结点 v //设置访问标记 //结点 v 入栈
while (top!=-1)
{
v=stack[top];
ArcNode<T> *p = adjlist[v]. firstarc; ①
)
A.1
B. n/2
C.n-1
D.n
解析:若超过 n-1,则路径中必存在重复的顶点
答案:C
(5) 若一个图中包含有 k 个连通分量,若按照深度优先搜索的方法访问所有顶点,则必
须调用(
)次深度优先搜索遍历的算法。
A.k
B.1
C.k-1
D.k+1
解析:一次深度优先搜索可以访问一个连通分量中的所有结点,因此 k 个连通分量需要 调用 k 次深度优先遍历算法。

} if (p==NULL) top--;
⑤//若是找不到未访问的结点,出栈

《数据结构(C语言版 第2版)》(严蔚敏 著)第六章练习题答案

《数据结构(C语言版 第2版)》(严蔚敏 著)第六章练习题答案

《数据结构(C语言版第2版)》(严蔚敏著)第六章练习题答案第6章图1.选择题(1)在一个图中,所有顶点的度数之和等于图的边数的()倍。

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

A.1/2B.1C.2D.4答案:B解释:有向图所有顶点入度之和等于所有顶点出度之和。

(3)具有n个顶点的有向图最多有()条边。

A.n B.n(n-1)C.n(n+1)D.n2答案:B解释:有向图的边有方向之分,即为从n个顶点中选取2个顶点有序排列,结果为n(n-1)。

(4)n个顶点的连通图用邻接距阵表示时,该距阵至少有()个非零元素。

A.n B.2(n-1)C.n/2D.n2答案:B所谓连通图一定是无向图,有向的叫做强连通图连通n个顶点,至少只需要n-1条边就可以了,或者说就是生成树由于无向图的每条边同时关联两个顶点,因此邻接矩阵中每条边被存储了两次(也就是说是对称矩阵),因此至少有2(n-1)个非零元素(5)G是一个非连通无向图,共有28条边,则该图至少有()个顶点。

A.7B.8C.9D.10答案:C解释:8个顶点的无向图最多有8*7/2=28条边,再添加一个点即构成非连通无向图,故至少有9个顶点。

(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是()图。

A.非连通B.连通C.强连通D.有向答案:B解释:即从该无向图任意一个顶点出发有到各个顶点的路径,所以该无向图是连通图。

(7)下面()算法适合构造一个稠密图G的最小生成树。

A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法答案:A解释:Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树。

(8)用邻接表表示图进行广度优先遍历时,通常借助()来实现算法。

A.栈 B.队列 C.树D.图答案:B解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

6-1-数据结构——从概念到C++实现(第3版)-王红梅-清华大学出版社

6-1-数据结构——从概念到C++实现(第3版)-王红梅-清华大学出版社
第六章v 图
6-1 图的提出
七巧板涂色问题
【问题】假设有下图所示七巧板,使用至多 4 种不同颜色对七巧板涂色,要求 每个区域涂一种颜色,相邻区域的颜色互不相同。求涂色方案。
【想法——数据模型】将七巧板的每个区域看成一个顶点,如果两个区域相邻,

则这两个顶点之间有边相连,从而将七巧板抽象为图结构。
据 结
念 到




【问题】排课问题。教室构成一
A
E
F
华 大 学
组顶点,课程构成一组顶点,如
V1={A, E, F}
出 版 社
果A教室可以安排B课程,则顶点
V2={B, C, D}
A和B之间有一条边。
B
C
D
农夫过河问题
【问题】农夫过河问题。一个农夫带着一只狼、一只羊和一筐菜,想从河一边
(左岸)乘船到另一边(右岸),由于船太小,农夫每次只能带一样东西过河,
先修课程
结 构

c1
程序设计基础

c2
电子技术基础

c3
离散数学
c1
c4
数据结构
c1


c3
c8
念 到 实

c1
) 清

c4
c6
大 学 出

c5
计算机原理
c1 c2

c6
操作系统
c3 c4 c5
c2
c5
c7
c7
计算机网络
c4 c5 c6
c8
数据库原理及应用 c4 c5
社交网络
数 据 结 构 ( 从 概 念 到 实 现 ) 清 华 大 学 出 版 社

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

数据结构第六章图理解练习知识题及答案解析详细解析(精华版)

图1. 填空题⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。

【解答】0,n(n-1)/2,0,n(n-1)【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。

⑵任何连通图的连通分量只有一个,即是()。

【解答】其自身⑶图的存储结构主要有两种,分别是()和()。

【解答】邻接矩阵,邻接表【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。

⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。

【解答】O(n+e)【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。

⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。

【解答】求第j列的所有元素之和⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。

【解答】出度⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。

【解答】前序,栈,层序,队列⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。

【解答】O(n2),O(elog2e)【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。

⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。

【解答】回路⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。

【解答】vi, vj, vk【分析】对由顶点vi, vj, vk组成的图进行拓扑排序。

数据结构与算法-第6章

数据结构与算法-第6章

如果 e=(u, v) 是 E(G) 中的一条边,则称 u 与 v
互为邻接点或相邻点;称边e与顶点u,v关联;
如果 a=<u, v> 是 E(G) 中的一条弧,则称u邻接到v
或v邻接于u,也称弧a与顶点u,v关联.
9
6.1 图的基本概念
顶点的度(与树中结点的度不同): –无向图中,顶点的度是与每个顶点关联的边数, 记作TD(v) –有向图中,顶点的度分成入度与出度 •入度:以该顶点为终头的弧的数目,记为ID(v) •出度:以该顶点为始点的弧的数目,记为OD(v) 一个顶点的度等于该顶点的入度与出度之和,即 TD(v)=OD(v)+ID(v)
20
带权图的邻接矩阵
wij 若(vi,vj)∈E或<vi,vj>∈E
A[i][j]= ∞ 其它 0 i=j
21
用邻接矩阵表示的图的类的定义
class AdjMatrix { int n; int matrix[MaxSize][ MaxSize]; public: AdjMatrix(int m) { n=m; } }; // AdjMatrix class AdjMatrix { const int INFINITE=∞; int n; float matrix[MaxSize][MaxSize]; public: AdjMatrix(int m) { n=m;} }; // AdjMatrix // 非带权图 // 顶点的个数 // 邻接矩阵
回路——第一个顶点和最后一个顶点相同的路径。
简单回路——除了第一个顶点和最后一个顶点外,其
余顶点不重复出现的回路。
11
6.1 图的基本概念
V0V1V3V2
V0V1V3V0V1V2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//定义邻接表数组,AdjList为顶点表结点的数组类型
//(3)定义图
typedef struct { AdjList adjList; //这是一个数组,见上 int numVexs , numEdges; //图的顶点数、图的边数 }GraphAdjList;
数据结构 励志照亮人生 编程改变命运 18
简单回路或简单环的定义:起点与终点相同的简单路径。
简单环 简单路径 路径1、3、2、4
数据结构
励志照亮人生
编程改变命运
7
6.1 图的概念及相关术语
二、图的相关术语 6、连通、连通图、连通分量 连通的定义:若从一个顶点到另一个顶点互有路径。 连通图的定义:无向图中任意两顶点连通。 连通分量的定义:无向图的极大连通子图(连通且子图)。
数据结构
励志照亮人生
编程改变命运
17
6.2图的存储结构
一、邻接矩阵表示法 5、图的类型定义
//(2)定义顶点表的结点
typedef struct VertexNode { Vertex vexs; //顶点域 EdgeNode *first; //指向该顶点的边表的头指针 }VertexNode , AdjList[MAXVERTEX];
遍历结果: V1 V2
V0,V1, V3, V4, V5, V2,V6,V7,V8
注:遍历结果不唯一 注:有点层次遍历的意味
数据结构 励志照亮人生
V5
V0
V3 V6
22
V8
V7
V4
编程改变命运
6.4最小生成树
一、相关概念 1、生成树的定义:连通图G的一个子图如果是一棵包含G
的所有顶点的树。
2、树的权的定义:生成树各边的权值总和。
6.3图的遍历
一、深度优先遍历 1、实例描述:选择从淮安出发,然后青岛、烟台、大连、 西安、开封、上海、苏州和扬州旅游路线,每一条路线尽 量延伸到所有城市。
数据结构
励志照亮人生
编程改变命运
19
6.3图的遍历
一、深度优先遍历 2、深度优先遍历过程 ①假设图G的初始状态是所有顶点均未曾访问过,在G中 任选一顶点为出发点(源点)。 ②首先将出发点V标记为已访问过,然后依次从V出发搜索 V的某个邻接点W,若W未曾访问过,则以W为新的出发 点继续进行深度优先遍历,直至图中所有和源点V有路径 相通的顶点均被访问为止。
顶点2和3互为邻接点
励志照亮人生
顶点1邻接到顶点2
顶点1和3互为邻接点
数据结构 编程改变命运 11
6.2 图的存储结构
一、邻接矩阵表示法 1、邻接矩阵是表示顶点之间相邻关系的矩阵(二维数组)。
V0
V1 邻接矩阵
V2
V3
0 1 1 0
1 0 1 1
1 1 0 1
0 1 1 0
对称矩阵
邻接矩阵
数据结构
此图为非连通图
连通分量
顶点1和4连通 顶点2和6非连通
数据结构
注:连通图的连通分量就是本身。
励志照亮人生 编程改变命运 8
6.1 图的概念及相关术语
二、图的相关术语 7、强连通图和强连通分量 强连通图的定义:在有向图中任意两个的顶点都连通 。 强连通分量的定义:有向图的极大连通 子图。
此图为非强连通图
子图
子图
数据结构
励志照亮人生
编程改变命运
6
6.1 图的概念及相关术语
二、图的相关术语 5、路径、简单路径和回路 路径的定义:在无向图中,若顶点Vp到顶点Vq存在一个顶 点序列Vp,V1,V2,…,Vi,Vq,使得Vp和顶点Vq相通。 简单路径的定义:若Vp到Vq存在一条路径,除了Vp和Vq可 以相同外,其余顶点均不相同,此路径为一条简单路径。
第6章 图的结构分析与应用
学习目标
了解图的定义及基本术语。 熟练掌握图的邻接矩阵和邻接链表存储方法。
熟练掌握图的深度优先和广度优先遍历。
熟练掌握最小生成树实现方法:普里姆算法(Prim)和克 鲁斯卡尔(Kruskal)算法。 掌握求单源最短路径的迪杰斯特拉(Dijkstra)算法,了解 求每对顶点间最短路径的弗洛伊德(Floyd)算法。 掌握AOE、AOV网概念,掌握拓扑排序,了解关键路径
励志照亮人生
编程改变命运
12
6.2图的存储结构
一、邻接矩阵表示法 2、顶点存储:需要一个一维数组来完成。
下标 数组Vexs 0 V0 1 V1 2 V2 3 V3
3、边表的存储:需要一个二维数组(见前) 4、顶点数和边数
数据结构
励志照亮人生
编程改变命运
13
6.2图的存储结构
一、邻接矩阵表示法 5、图的类型定义 #define MAXVERTEX 100 //最大顶点个数 #define MAXSIZE 100 //队列最大个数99 typedef char Vertex; //设置顶点类型 typedef int Edge; //设置边类型 typedef struct { Vertex Vexs[MAXVERTEX]; //顶点表 Edge Edges[MAXVERTEX][MAXVERTEX]; int numVexs, numEdges; //顶点个数,边个数 } MGraph; //定义图
顶点到V-U集合中顶点的最小边权值。如果某个顶点已加入
U中,设该顶点对应的下标为j,则用lowcost[j]=0表示。 初始时,假设U={V0},所以lowcost[ 0]=0,其余lowcost[1~n]则 为V0 到其余顶点的边的权值,如果没有边,则其值可用∞表
示,当然∞可以用65535等比较大的数字表示,这个比较大
数据结构
励志照亮人生
编程改变命运
21
6.3图的遍历
二、广度优先遍历 2、广度优先遍历过程 ①假设图G的初始状态是所有顶点均未曾访问过,在G中 任选一顶点为出发点(源点)。 ②首先将出发点V标记为已访问过,然后依次从V出发搜索 V的每个邻接点W1,W2,…,Wn,再依次访问与W1, W2,…,Wn邻接的所有未曾访问过的顶点,至图中所 有和源点V有路径相通的顶点都已访问到为止。
强连通分量
顶点2和1非连通 顶点2和3非连通
数据结构
注:强连通图的强连通分量就是本身。
励志照亮人生 编程改变命运 9
6.1 图的概念及相关术语
二、图的相关术语 8、边的权、网 边的权(Weight)的定义:与边有关的数据为权。权可以 是长度、等级、电流、时间、代价等。 网(Network)的定义:边上带权的图称为网或网络。
//typedef int Edge; //边的权值 //(1)定义边表的结点
typedef struct EdgeNode { int adjvex; //邻接点域:存储顶点对应的下标 // Edge info; //存储边的权值 struct EdgeNode *next; //指向下一个邻接点 } EdgeNode; //边表结点
数据结构 励志照亮人生 编程改变命运 23
6.4最小生成树
二、普里姆(Prim)算法 假设图为G=(V,E),V为顶点集合,E为边集合。 (1)选择一个顶点Vi作为源点, 并纳入集合U={Vi},T={}; (2)选择与Vi邻接的顶点中,与Vi构成所有边中权值最小的 顶点Vj并纳入集合U={Vi , Vj},T={Eij}; (3)选择集合U中的顶点与集合V-U 中顶点邻接的边中,权 值最小的顶点Vw,并纳入集合U={Vi , Vj ,Vw}中,T={Eij,Eiw} 或T={Eij,Ejw} ;
二、邻接表表示法 3、定义:边表结点(单链表) 4、定义:顶点表结点(单链表) 5、封装:图的顶点数、边数
数据结构
励志照亮人生
编程改变命运
16
6.2图的存储结构
一、邻接矩阵表示法 5、图的类型定义 #define MAXVERTEX 100 //顶点数最多100 typedef char Vertex; //顶点定义为字符
数据结构 励志照亮人生 编程改变命运 1
6.1 图的概念及相关术语
零、引 假设6个城市间要铺设光纤,城市间的路径长度如图所示。
数据结构
励志照亮人生
编程改变命运
2
6.1 图的概念及相关术语
一、图的概念 1、图的定义:记为G=(V,E),其中V是顶点的有穷非空集 合,E是边的有穷集合。 V={V0, V1, V2, …Vn-1},Vi顶点的集合,属于某种数据类型。 E={(V0, V2), (V3, V4), … } ,其中“()”可以用“<>” 表示有向边,称为弧。
图是一种m:n(多对多)的关系 。
E={(1,2),(1,3),(2,3),(3,4)}
数据结构 励志照亮人生
E={<1,2>,<1,3>,<3,1>,<3,2>}
编程改变命运 3
6.1 图的概念及相关术语
一、图的概念 2、无向图的定义:每条边都是没有方向的图。 3、有向图的定义:每条边都是有方向的图。
遍历结果: V1 V2
V0,V1,V2,V3,V6,V4,V7,V8,V5
注:遍历结果不唯一
回溯 V8
V5
V0
V3 V6
20
V7
V4
数据结构
励志照亮人生
编程改变命运
6.3图的遍历
二、广度优先遍历 1、实例描述:选择从淮安出发, 然后青岛、开封、扬州、 上海、烟台、西安、苏州和大连旅游路线,尽量先旅游附 近的城市,然后逐渐扩大范围。
(4)重复第三步,直到U中包含所有顶点,此时U=V,E 中必有n-1条边(图G有n个顶点)
注:步骤3保证了生成树不会出现回路,因为两个顶点的 集合U和V-U,正好其顶点互不相同。
相关文档
最新文档