数据结构——第7章 图和广义表1
数据结构各章概要

数据结构各章概要数据结构是计算机科学中非常重要的一个学科,其主要研究各种数据的组织方式和操作方法。
善于运用合适的数据结构可以提高算法的效率,并优化程序的性能。
本文将对数据结构的各个章节进行概要介绍,帮助读者了解不同章节的主要内容和应用。
第一章:引论在引论章节,我们将引入数据结构的基本概念和术语,例如什么是数据、数据项、数据对象等等。
同时,还将介绍数据结构的分类和基本操作,如搜索、遍历、插入、删除和排序。
这些基础知识是后续章节的基础。
第二章:线性表线性表是数据结构中最简单、最基本的一种结构。
其特点是数据元素之间的前驱和后继关系非常明确。
线性表可以用数组和链表两种方式实现。
在本章节中,我们将分别介绍顺序表和链表的实现原理、插入、删除、合并以及应用场景。
第三章:栈和队列栈和队列是两种特殊的线性表结构,它们对数据的访问具有限制性。
栈具有“先进后出”的特点,而队列则具有“先进先出”的特点。
在本章节中,我们将介绍栈和队列的实现方式以及常见的应用场景,如递归、表达式求值、广度优先搜索等。
第四章:串串是由零个或多个字符组成的有限序列,其长度可以为零。
在本章节中,我们将介绍串的定义和操作,包括字符串的模式匹配、模式识别和编辑操作。
串的相关算法在文本处理、计算机网络等领域具有广泛的应用。
第五章:数组和广义表数组是一种在内存中以连续方式存储的数据结构,它具有高效的随机访问特性。
广义表是线性表的一种扩展,可以包含表结构、原子结构以及其他广义表。
本章节将介绍数组和广义表的定义、操作和应用。
第六章:树树是一种非线性的数据结构,具有分层次、递归和层次遍历等特点。
在本章节中,我们将介绍树的基本概念、二叉树、树的遍历算法、平衡树以及树的应用,如编译器中的语法树、文件系统的目录结构等。
第七章:图图是一种复杂的非线性数据结构,由顶点集合和边集合组成。
在本章节中,我们将介绍图的各种表示方式,图的遍历算法、最短路径算法以及常用的图算法,如最小生成树算法和拓扑排序。
数据结构(C语言版)(第2版)课后习题答案

数据结构(C语言版)(第2版)课后习题答案数据结构(C语言版)(第2版)课后习题答案目录第1章绪论1 第2章线性表5 第3章栈和队列13 第4章串、数组和广义表26 第5章树和二叉树33 第6章图43 第7章查找54 第8章排序65 第1章绪论1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。
答案:数据:是客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。
如数学计算中用到的整数和实数,文本编辑所用到的字符串,多媒体程序处理的图形、图像、声音、动画等通过特殊编码定义后的数据。
数据元素:是数据的基本单位,在计算机中通常作为一个整体进行考虑和处理。
在有些情况下,数据元素也称为元素、结点、记录等。
数据元素用于完整地描述一个对象,如一个学生记录,树中棋盘的一个格局(状态)、图中的一个顶点等。
数据项:是组成数据元素的、有独立含义的、不可分割的最小单位。
例如,学生基本信息表中的学号、姓名、性别等都是数据项。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
例如:整数数据对象是集合N={0,±1,±2,。
},字母字符数据对象是集合C={‘A’,‘B’,。
,‘Z’,‘a’,‘b’,。
,‘z’},学生基本信息表也可是一个数据对象。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。
换句话说,数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。
逻辑结构:从逻辑关系上描述数据,它与数据的存储无关,是独立于计算机的。
因此,数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。
存储结构:数据对象在计算机中的存储表示,也称为物理结构。
抽象数据类型:由用户定义的,表示应用问题的数学模型,以及定义在这个模型上的一组操作的总称。
具体包括三部分:数据对象、数据对象上关系的集合和对数据对象的基本操作的集合。
2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。
《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)

《数据结构》第二版严蔚敏课后习题作业参考答案(1-7章)【第一章绪论】1. 数据结构是计算机科学中的重要基础知识,它研究的是如何组织和存储数据,以及如何通过高效的算法进行数据的操作和处理。
本章主要介绍了数据结构的基本概念和发展历程。
【第二章线性表】1. 线性表是由一组数据元素组成的数据结构,它的特点是元素之间存在着一对一的线性关系。
本章主要介绍了线性表的顺序存储结构和链式存储结构,以及它们的操作和应用。
【第三章栈与队列】1. 栈是一种特殊的线性表,它的特点是只能在表的一端进行插入和删除操作。
本章主要介绍了栈的顺序存储结构和链式存储结构,以及栈的应用场景。
2. 队列也是一种特殊的线性表,它的特点是只能在表的一端进行插入操作,而在另一端进行删除操作。
本章主要介绍了队列的顺序存储结构和链式存储结构,以及队列的应用场景。
【第四章串】1. 串是由零个或多个字符组成的有限序列,它是一种线性表的特例。
本章主要介绍了串的存储结构和基本操作,以及串的模式匹配算法。
【第五章数组与广义表】1. 数组是一种线性表的顺序存储结构,它的特点是所有元素都具有相同数据类型。
本章主要介绍了一维数组和多维数组的存储结构和基本操作,以及广义表的概念和表示方法。
【第六章树与二叉树】1. 树是一种非线性的数据结构,它的特点是一个节点可以有多个子节点。
本章主要介绍了树的基本概念和属性,以及树的存储结构和遍历算法。
2. 二叉树是一种特殊的树,它的每个节点最多只有两个子节点。
本章主要介绍了二叉树的存储结构和遍历算法,以及一些特殊的二叉树。
【第七章图】1. 图是一种非线性的数据结构,它由顶点集合和边集合组成。
本章主要介绍了图的基本概念和属性,以及图的存储结构和遍历算法。
【总结】1. 数据结构是计算机科学中非常重要的一门基础课程,它关注的是如何高效地组织和存储数据,以及如何通过算法进行数据的操作和处理。
本文对《数据结构》第二版严蔚敏的课后习题作业提供了参考答案,涵盖了第1-7章的内容。
数据结构——第7章 图和广义表1

强连通 在有向图中, 若对于每一对顶点vi和vj, 都存在一条从 vi到vj和从vj到vi的路径, 则称此图是强连通图。 图:
非强连通图的极大强连通子图叫做强连通分量。
生成树:是一个极小连通子图,它含有图中全部顶点,但只有
无向图 完全图
无向图(树)
有向图
完全图 有向图
n(n-1)/2 条边
n(n-1) 条边
带权图:即边上带权的图。其中权是指每条边可以标上 具有某种含义的数值(即与边相关的数)。 网 络: =带权图(带权的有向图与无向图)
子 图: 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’ V 且 E’ E, 则称 图G’ 是 图G 的子图。
例1:
例2 :有向图的邻接矩阵
v1 v2 v4
G
v3
顶点表: 邻接矩阵:
A=
( v1 v2 v3 v4 ) 1 1 0 0 0 0 v1 0 0 0 0 v2 0 0 0 1 v3 0 1 0 0 0 0 v4
注:在有向图的邻接矩阵中, 第i行含义:以结点vi为尾的弧(即出度边); 第i列含义:以结点vi为头的弧(即入度边)。
分析1:有向图的邻接矩阵可能是不对称的。 分析2:顶点的出度=第i行元素之和,OD( Vi )= A [ i ][j ]
顶点的入度=第i列元素之和。ID( Vi )= A [ j ][i ] 顶点的度=第i行元素之和+第i列元素之和, 即:TD(Vi)=OD( Vi ) + ID( Vi )
特别讨论 :
数据结构的内容
图(Graph)是一种非线性结构。
《数据结构》教案

《数据结构》教案信息技术学院软件教研室课程说明【目的】1.数据结构是研究数据组织、存储和运算的一般方法的学科。
——理解并掌握数据的各种数据结构的原理与算法。
2. 学会分析研究计算机加工的数据结构的性质,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。
3.数据结构是编程的基础。
程序=数据结构+算法——能够以数据结构为基础,进行复杂程序编程,且符合软件工程的规范。
4.数据结构课程重点是培养学生的数据抽象能力。
【内容】1.数据结构的基本概念(第1章)2、线性表(第2、3、4、5章)3、树(第6章)4、图(第7章)5、查找和排序(第9、10、11章)【参考书】1.数据结构严蔚敏清华大学出版社2. 数据结构(c语言篇)——习题与解析(修订版)李春葆清华大学出版社【教学安排】第1章绪论【教学目的】1.数据结构的基本概念,介绍数据和数据结构等名词和术语。
2.描述算法的类C语言3.从时间和空间角度分析算法的方法【教学要求】掌握基本概念,了解抽象数据类型,掌握计算语句频度和估算算法时间复杂度,熟悉类C语言的书写规范。
【教学重点与难点】描述算法的类C语言;抽象数据类型的概念;算法复杂性的分析方法【教学追记】1、熟悉各名词、术语的含义,掌握基本概念,特别是数据结构的三个方面(逻辑结构、存储结构、及其运算)。
数据的逻辑结构和存储结构之间的关系。
分清哪些是逻辑结构的性质,哪些是存储结构的性质。
2、了解抽象数据类型的定义、表示和实现方法。
3、理解算法五个要素的确切含义:①动态有穷性(能执行结束);②确定性(对于相同的输入执行相同的路径);③有输入;④有输出;⑤可行性(用以描述算法的操作都是足够基本的)。
4、掌握计算语句频度和估算算法时间复杂度的方法。
5、熟悉类C语言的书写规范,对学过C++的学生,比较输入/输出语句cin /cout;动态分配内存语句new与C语言的区别。
数据结构广义表

结点结构是无论什么结点都有三个域:
第一个域是结点类型标志tag; 第二个域是指向一个列表的指针(当tag=1时) 或一个原子(当tag=0时); 第三个域是指向下一个结点的指针tp。
3 广义表的存储结构
形式描述为:
typedef enum{ ATOM, LIST }ElemTag typedef struct GLNode { //定义广义表结点 ElemTage tag; //公共部分,用以区分 原子结点和表结点 Unin{ //原子结点和表结点的联合部分 AtomType atom;//原子类型结点域, // AtomType由用户定义 struct GLNode *hp,; //表结点的表头指针域 }; struct GLNode *tp; //指向下一个结点的指针 }*Glist; //广义表类型
5. E=(a,E)
这是一个递归列表,其元素中有自己。
广义表也可以用图形表示,例如前述的广义表D和E可表示为:
广义表D
D
广义表E
E
C
A
B
a
e
a b c d
2 广义表的基本运算
广义表的基本运算 ⑴ 取表头 HEAD(LS); ⑵ 取表尾 TAIL(LS)。
3 广义表的存储结构
广义表中的数据元素可以是单元素,或是广义表, •很难用顺序存储结构表示,常采用链式存储结构。 1.表头表尾链存储结构 有两类结点:表结点和单元素结点。
P 1 3 1 1
A=y((c,3),(D,2)) C=x((1,10),(2,6))
^
1 2
A
z y 1 1 1 3
C
x 0 0 15 ^
B
1 2
1 2
^
火箭军工程大学2019考研大纲:843数据结构

火箭军工程大学2019考研大纲:843数据结构考研大纲频道为大家提供火箭军工程大学2019考研大纲:843数据结构,一起来了解一下考试内容吧!更多考研资讯请关注我们网站的更新!火箭军工程大学2019考研大纲:843数据结构科目代码:843科目名称:数据结构适用学科:计算机科学与技术、计算机技术(专业学位)一、考试的总体要求主要考查学生对数据结构的基本理论与应用的掌握情况,以便为应用所涉及的数据结构选择适当的逻辑结构、存储结构及其相应的操作算法。
考试时用C语言及C++语言描述算法均可。
二、考试的内容第1章数据结构基础知识(1.2 与数据结构相关的概念;1.3.3 算法效率的衡量方法和准则);第2章线性表(2.1 线性表的类型定义;2.2 线性表的顺序表示和实现;2.3 线性表的链式表示和实现(其中,2.3.5 双向链表不作要求); 2.5 顺序表和链表的综合比较)第3章排序(3.1 排序的基本概念;3.2 简单排序方法;3.3 先进排序方法;3.4 基数排序;3.5 各种排序方法的综合比较)第4章栈和队列(4.1 栈; 4.2 栈的应用举;4.3 队列;4.4 队列应用举例)第5章串和数组(5.1 串的定义和操作;5.2 串的表示和实现;5.3 正文模式匹配)第6章二叉树和树(6.1 二叉树;6.2 二叉树遍历(其中,6.2.4 线索二叉树不作要求);6.3 树和森林;6.4 树的应用)第7章图和广义表(7.1 图的定义和术语;7.2 图的存储结构; 7.3 图的遍历;7.4 连通网的最小生成树;7.5 单源最短路径;7.6 拓扑排序;7.7 关键路径)第8章查找表(8.1 静态查找表;8.2 动态查找表(其中,键树不作要求);8.3 哈希表及其查找)三、试卷类型及比例(1)填空题,约占10%。
(2)选择题,约占30%。
(3)简答题、综合题、设计题,约占60%。
四、考试形式及时间考试形式为笔试,考试时间为3小时,满分150分。
数据结构试题答案

第一章概论一、选择题1、研究数据结构就是研究(D )。
A. 数据的逻辑结构B. 数据的存储结构C. 数据的逻辑结构和存储结构D. 数据的逻辑结构、存储结构及其基本操作(研究非数值计算的程序设计问题中,计算机操作对象以及他们之间的关系和操作)2、算法分析的两个主要方面是( A )。
A. 空间复杂度和时间复杂度B. 正确性和简单性C. 可读性和文档性D. 数据复杂性和程序复杂性3、具有线性结构的数据结构是( D )。
(线性结构就是:在非空有限集合中,存在为一个被称为第一个的数据元素和最后一个元素,有除了第一个元素,集合中每一个元素均只有一个前驱,除了最后一个元素有唯一后继)(链表、栈、队列、数组、串)A. 图B. 树C. 广义表(线性表的推广)D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、(B )等5个特性。
A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是( C )。
for(i=0;i<m;i++)for(j=0;j<n;j++)a[i][j]=i*j;A. O(m2)B. O(n2)C. O(m*n)D. O(m+n)6、算法是(D )。
为了解决某一问题而规定的一个有限长的操作序列A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为(3n+nlog2n+n2+8),其时间复杂度表示(C )。
A. O(n)B. O(nlog2n)C. O(n2)D. O(log2n)8、下面程序段的时间复杂度为( C )。
i=1;while(i<=n)i=i*3;A. O(n)B. O(3n)C. O(log3n)D. O(n3)9、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的(B )和运算等的学科。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顶点 vi 的入度为第 i 个
单链表中的结点个数。 顶点 vi 的出度为整个单 链表中邻接点域值是 i-1 的结点个数。
韶关学院数信学院
数据结构 图的邻接表存储表示:
第七章 图和广义表
#define MAX_VERTEX_NUM 20 typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位臵 struct ArcNode *nextarc; // 指向下一条弧的指针 InfoType *info; // 该弧相关信息的指针 } ArcNode; typedef struct VNode { VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM]; typedef struct { AdjList vertices; int vexnum, arcnum; // 图的当前顶点数和弧数 int kind; // 图的种类标志 } ALGraph; 韶关学院数信学院
无向图 完全图
无向图(树)
有向图
完全图 有向图
n(n-1)/2 条边
n(n-1) 条边
带权图:即边上带权的图。其中权是指每条边可以标上 具有某种含义的数值(即与边相关的数)。 网 络: =带权图(带权的有向图与无向图)
子 图: 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’ V 且 E’ E, 则称 图G’ 是 图G 的子图。
例1:
例2 :有向图的邻接矩阵
v1 v2 v4
G
v3
顶点表: 邻接矩阵:
A=
( v1 v2 v3 v4 ) 1 1 0 0 0 0 v1 0 0 0 0 v2 0 0 0 1 v3 0 1 0 0 0 0 v4
注:在有向图的邻接矩阵中, 第i行含义:以结点vi为尾的弧(即出度边); 第i列含义:以结点vi为头的弧(即入度边)。
怎样计算有向图顶点的出度? OD(Vi)=单链出边表中链接的结点数 怎样计算有向图顶点的入度? I D( Vi ) =邻接点为Vi的弧个数 怎样计算有向图顶点Vi的度: TD(Vi) = OD( Vi ) + I D( Vi ) 需遍历全表 邻接表的优点: 空间效率高;容易寻找顶点的邻接点;
邻接表的缺点: 判断两顶点间是否有边或弧,需搜索两结 点对应的单链表,没有邻接矩阵方便。
v2
邻接表
0 1 2 3 v1 v2 ^ v3 v4 2
逆邻接表 1 ^
0 1 2 3 v1 v2 v3 v4
v3
v4
特点:
3 ^ 0 ^ 找出度易, 找入度难。
3 ^ 0 ^ 0 ^ 2 ^ 找入度易, 找出度难。
顶点 vi 的出度为第 i 个
单链表中的结点个数。 顶点 vi 的入度为整个单 链表中邻接点域值是 i-1 的结点个数。
数据结构
选择题
1. 在一个图中,所有顶点的度数之和等于所有边数的 ( ) 倍。 (A)1/2 (B)1 (C)2 (D)4
7.3 图的遍历
7.4 连通网的最小生成树 7.5 单源最短路径 7.6 拓朴排序 7.7 关键路径 7.8 广义表
7.1 图的基本术语
图:记为 G=( V, E ) 其中:V 是G的顶点集合,是有穷非空集; E 是G的边集合,是有穷集。
问:当E(G)为空时,图G存在否? 答:还存在!但此时图G只有顶点而没有边。
分析1:有向图的邻接矩阵可能是不对称的。 分析2:顶点的出度=第i行元素之和,OD( Vi )= A [ i ][j ]
顶点的入度=第i列元素之和。ID( Vi )= A [ j ][i ] 顶点的度=第i行元素之和+第i列元素之和, 即:TD(Vi)=OD( Vi ) + ID( Vi )
特别讨论 :
网(即有权图)的邻接矩阵
Wij <vi, vj> 或(vi, vj)∈VR
定义为: A [ i ][ j ]=
∞
无边(弧)
以有向网为例:
v1 N 3 v6 1 v5 7 6 5
5
顶点表: ( v1 v2 v3 v4 v5 v6 ) ∞ 5 ∞ 77 ∞ ∞ ∞5∞ ∞ ∞ ∞ ∞ v2 ∞∞ 4 ∞ ∞ 4 邻接矩阵: ∞ ∞ ∞4∞∞ ∞ ∞ 8 ∞ ∞ ∞ ∞ 88∞ ∞ ∞∞ ∞ 99 N= v3 9 ∞ ∞ 5∞ ∞ ∞ ∞ ∞ ∞5 ∞ ∞ 6 6 5 ∞∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞55 ∞ ∞ v4 ∞ ∞ ∞ ∞ 3 3 ∞ ∞ ∞∞ 11 ∞
邻接点域,存放与 vi 邻接的 链域,指示下一条边或弧。 若无向图中有顶点在表头数组中的位置。 n 个顶点、e 条边,则其邻接表需 n 个头 结点和 2e 个表结点。适宜存储稀疏图。
无向图中顶点 vi 的度为第 i 个单链表中的结点数。
韶关学院数信学院
▲
数据结构 v1
第七章 图和广义表
G1
v3
v4
V1 V2 ^ V3 V4
V1 V2 V3 V4
3 0 0 2
^ ^ ^ ^
例3:已知某网的邻接(出边)表,请画出该网络。
当邻接表的存储 结构形成后,图 便唯一确定!
邻接表存储法的特点:—它其实是对邻接矩阵法的一种改进
分析1: 对于n个顶点e条边的无向图,邻接表中除了n个头结点 外,只有2e个表结点,空间效率为O(n+2e)。 若是稀疏图(e<<n2),则比邻接矩阵表示法O(n2)省空间。 怎样计算无向图顶点的度? TD(Vi)=单链表中链接的结点个数 分析2:在有向图中,邻接表中除了n个头结点外,只有e个表结点, 空间效率为O(n+e)。若是稀疏图,则比邻接矩阵表示法合适。
例1:无向图的邻接表
v1 v3 v4 v5 v2
邻接表
3 2 注:邻接表不唯一,因各个边结点的链入顺序是任意的。
0 1 2 3 4
v1 v2 v3 v4 v5
3 4 4 4
1 ^ 2 3 2
0 ^ 1 ^ 0 ^ 1 ^
例2:有向图的邻接表
v1
v2
邻接表(出边) 2 3 ^ 0 ^ 1 ^
逆邻接表(入边)
1, A[i ][ j ] 0, 如果 < i , j > E 或者 (i , j ) E 否则
顶点表: ( v1 v2 v3 v4 v5 ) v2 v1 0 0 0 1 0 v1 1 0 邻接矩阵: G v3 1 1 1 0 0 0 0 0 v2 A= 1 0 0 0 1 1 v3 0 0 v4 v5 1 0 0 0 1 v4 1 0 0 0 0 0 0 0 v5 1 1 1 分析1:无向图的邻接矩阵是对称的; 分析2:顶点i 的度=第 i 行 (列) 中1 的个数; 特别:完全图的邻接矩阵中,对角元素为0,其余全1。
链式存储结构: 可用多重链表
• 邻接表 • 邻接多重表 • 十字链表
设计为邻接矩阵
重点介绍: 邻接矩阵(数组)表示法
邻接表(链式)表示法
7.2.1 邻接矩阵(数组)表示法
一个有 n 个顶点的图,可用两个数组存储。其中一个 一维 数组存储数据元素(顶点)的信息,另一个二维数组(邻接 矩阵)存储数据元素之间的关系(边或弧)的信息。 设图 G = (V, E) 有 n 个顶点,则图的邻接矩阵是一个二维数 组 A [n][n],定义为:
路径:在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些
顶点 vp1, vp2, …, vpm,到达顶点vj。则称顶点序列 ( vi vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应当是属于E的边。
V=vertex E=edge
有向图: 图G中的每条边都是有方向的; 无向图: 图G中的每条边都是无方向的; 完全图: 图G任意两个顶点都有一条边相连接;
若 n 个顶点的无向图有 n(n-1)/2 条边, 称为无向完全图 若 n 个顶点的有向图有n(n-1) 条边, 称为有向完全图
例:判断下列4种图形各属什么类型?
数据结构
第七章 图和广义表
7.2.2 图的邻接表存储表示法( 链式存储 ) v1 G2 v2
v3
v4 v5 头结点 data firstarc
0 1 2 3 4
v1 v2 v3 v4 v5
3 4 4 2 2
1 ^ 2 3 0 ^ 1 ^ info
0 ^ 1 ^
表结点 adjvex nextarc
特点:
邻接矩阵法优点: 容易实现图的操作,如:求某顶点的度、判断 顶点之间是否有边(弧)、顶点的邻接点等等。 邻接矩阵法缺点: n个顶点需要n*n个单元存储边(弧);空间效率 为O(n2)。 对稀疏图而言尤其浪费空间。
数据结构 图的数组(邻接矩阵)存储表示:
第七章 图和广义表
#define INFINITY INT_MAX // 最大值∞ #define MAX_VERTEX_NUM 20 // 最大顶点个数 typedef enum {DG, DN, AG, AN} GraphKind; //{有向图,有向网,无向图,无向网} typedef struct ArcCell { VRType adj; // VRType是顶点关系类型。对无权图用1或0表示相邻否; // 对带权图,则为权值类型。 InfoType *info; // 该弧相关信息的指针 } ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { VertexType vexs[MAX_VERTEX_NUM]; // 顶点向量 AdjMatrix arcs; // 邻接矩阵 int vexnum, arcnum; // 图的当前顶点数和弧(边)数 GraphKind kind; // 图的种类标志 } MGraph; 韶关学院数信学院