数据结构精品课程ppt 16
《数据结构》课件

查找操作
顺序查找
二分查找
链表查找
在顺序存储结构的线性表中,查找操 作需要从线性表的第一个节点开始, 逐个比较节点的数据域,直到找到目 标数据或遍历完整个线性表。时间复 杂度为O(n)。
在有序的顺序存储结构的线性表中, 查找操作可以采用二分查找算法。每 次比较目标数据与中间节点的数据域 ,如果目标数据大于中间节点,则在 右半部分继续查找;否则在左半部分 查找。时间复杂度为O(log n)。
数据结构是算法的基础。许多算法的实现需要依赖于特定的数据结构, 因此掌握常见的数据结构是编写高效算法的关键。
数据结构在解决实际问题中具有广泛应用。无论是操作系统、数据库系 统、网络通信还是人工智能等领域,数据结构都发挥着重要的作用。
数据结构的分类
根据数据的逻辑关系,数据结构可以分为线性结构和非线 性结构。线性结构如数组、链表、栈和队列等,非线性结 构如树形结构和图形结构等。
04
数据结构操作
插入操作
顺序插入
在顺序存储结构的线性表中,插入操作 需要找到插入位置的前驱节点,修改前 驱节点的指针,使其指向新节点,然后 让新节点指向后继节点。如果线性表的 第一个节点是空节点,则将新节点作为 第一个节点。
VS
链式插入
在链式存储结构的线性表中,插入操作需 要找到插入位置的前驱节点,修改前驱节 点的指针,使其指向新节点。如果线性表 的第一个节点是空节点,则将新节点作为 第一个节点。
图
01
02
03
04
图是一种非线性数据结构,由 节点和边组成,其中节点表示 数据元素,边表示节点之间的
关系。
图具有网络结构,节点之间的 关系可以是任意复杂的,包括
双向、单向、无向等。
(2024年)《数据结构》全套课件

30
树形数据结构的查找算法
二叉排序树的查找
从根节点开始,若查找值小于当前节点 值,则在左子树中查找;若大于当前节 点值,则在右子树中查找。
VS
平衡二叉树的查找
在保持二叉排序树特性的基础上,通过旋 转操作使树保持平衡,提高查找效率。
2024/3/26
31
散列表的查找算法
散列函数的设计
将关键字映射为散列表中位置的函数。
过指针来表示。
链式存储的特点
逻辑上相邻的元素在物理位置上 不一定相邻;每个元素都包含数
据域和指针域。
链式存储的优缺点
优点是插入和删除操作不需要移 动元素,只需修改指针;缺点是
存储密度小、空间利用率低。
2024/3/26
11
线性表的基本操作与实现
插入元素
在线性表的指定位 置插入一个元素。
查找元素
在线性表中查找指 定元素并返回其位 置。
自然语言处理的应用
在自然语言处理中,需要处理大量的文本数据,数据结构中的字符 串、链表、树等可以很好地支持文本的处理和分析。
41
数据结构在计算机网络中的应用
2024/3/26
路由算法的实现
计算机网络中的路由算法需要大量的数据结构支持,如最短路径 树、距离向量等。
网络流量的控制
在计算机网络中,需要对网络流量进行控制和管理,数据结构中的 队列、缓冲区等可以很好地支持流量的控制。
37
06
数据结构的应用与拓展
2024/3/26
38
数据结构在算法设计中的应用
01
作为算法设计的基 础
数据结构为算法提供了基本操作 和存储方式,是算法实现的重要 基础。
02
提高算法效率
数据结构精选课件(ppt 82页)

10.01.2020
11
1.2 数据结构的内容
逻辑结构 存储结构 运算集合
10.01.2020
12
逻辑结构
定义: 数据的逻辑结构是指数据元素之间逻辑关系描述。
形式化描述: Data_Structure=(D,R)其中D是数据元素的
有限集,R是D上关系的有限集。
四类基本的结构 集合结构、线性结构、树型结构、图状结构。
10.01.2020
13
集合结构
定义: 结构中的数据元素之间除了同属于
一个集合的关系外,无任何其它关系。
例如:
集合
10.01.2020
14
线ቤተ መጻሕፍቲ ባይዱ结构
定义: 结构中的数据元素之间存在着一对
一的线性关系。
例如:
线性表
10.01.2020
15
树型结构
定义: 结构中的数据元素之间存在着一对
多的层次关系。
数据结构课件
用C语言描述
西北师范大学经济管理学院
----信息管理系
10.01.2020
1
第1章 绪 论
1.1 数据结构的基本概念(定义) 1.2 数据结构的内容(研究范围) 1.3 算法设计 1.4 算法描述工具 1.5 对算法作性能评价 1.6 数据结构与C语言表示
●1.7 关于学习数据结构
100001 张爱芬 女 345.67 145.45 30.00 451.12
100002 李 林 男 445.90 185.60 45.00 586.50
100003 刘晓峰 男 345.00 130.00 25.00 450.00
100004 赵 俊 女 560.90 225.90 65.00 721.80
数据结构PPT数据结构PPT

例、一叠书或一叠盘子。 栈的抽象数据类型的定义如下:P44
栈顶
an a n-1
……
a2
栈底
a1
7 6 5 4 3 2 1 top -1
来指示当前栈顶的位置,通常称top为栈顶指 针。因此,顺序栈的类型定义只需将顺序 表的类型定义中的长度属性改为top即可。 顺序栈的类型定义如下: # define StackSize 100 typedef char datatype; typedef struct { datatype data[stacksize]; int top; }seqstack;
3.4 队列 3.4.1 抽象数据类型队列的定义
队列(Queue)也是一种运算受限的线性表。它只 允许在表的一端进行插入,而在另一端进行删除。 允许删除的一端称为队头(front),允许插入的一端 称为队尾(rear)。 例如:排队购物。操作系统中的作业排队。先进 入队列的成员总是先离开队列。因此队列亦称作先 进先出(First In First Out)的线性表,简称FIFO 表。 当队列中没有元素时称为空队列。在空队列中依 次加入元素a1,a2,…an之后,a1是队头元素,an是队 尾元素。显然退出队列的次序也只能是a1,a2,…an , 也就是说队列的修改是依先进先出的原则进行的。
3.2 栈的应用举例 由于栈结构具有的后进先出的固有特性, 致使栈成为程序设计中常用的工具。以下 是几个栈应用的例子。 3.2.1 数制转换 十进制N和其它进制数的转换是计算机 实现计算的基本问题,其解决方法很多,其中 , , 一个简单算法基于下列原理: N=(n div d)*d+n mod d ( 其中:div为整除运算,mod为求余运算) 例如 (1348)10=(2504)8,其运算过程如下:
《数据结构》课件

第二章 线性表
1
线性表的顺序存储结构
2
线性表的顺序存储结构使用数组来存储元素,
可以快速随机访问元素。
3
线性表的常见操作
4
线性表支持常见的操作,包括插入、删除、 查找等,可以灵活地操作其中的元素。
线性表的定义和实现
线性表是一种数据结构,它包含一组有序的 元素,可以通过数组和链表来实现。
线性表的链式存储结构
线性表的链式存储结构使用链表来存储元素, 支持动态扩展和插入删除操作。
第三章 栈与队列
栈的定义和实现
栈是一种特殊的线性表,只能在一 端进行插入和删除操作,遵循后进 先出的原则。
队列的定义和实现
队列是一种特殊的线性表,只能在 一端进行插入操作,在另一端进行 删除操作,遵循先进先出的原则。
栈和队列的应用场景和操作
哈希表是一种高效的查找数据结构, 通过哈希函数将关键字映射到数组 中,实现快速查找。
排序算法包括冒泡排序、插入排序 和快速排序等,可以根据数据规模 和性能要求选择合适的算法。
结语
数据结构的学习心得 总结
学习数据结构需要掌握基本概念 和常见操作,通过实践和练习加 深理解和熟练度。
下一步学习计划的安 排
在掌握基本数据结构的基础上, 可以进一步学习高级数据结构和 算法,提升编程技能。
相关学习资源推荐
推荐一些经典的数据结构教材和 在线学习资源,如《算法导论》 和LeetCode等。
栈和队列在计算机科学中有许多应 用,如函数调用、表达式求值和作 业调度等。
第四章 树与二叉树
树的定义和性质
树是由节点和边组成的一种非线性数据结构,每个 节点可以有多个子节点。
二叉树的遍历方式
二叉树的遍历方式包括前序遍历、中序遍历和后序 遍历,可以按不同顺序输出节点的值。
数据结构讲义精品PPT课件

003 陈诚 02 男 19840910 638
… … … ……
…
数据元素
数据结构 具有结构的数据元素的集合。它包 括数据元素的逻辑结构、存储结构和相适应的 运算。
逻辑结构
数据元素之间的逻辑关系,与计算机无关。 可用一个二元组表示:Data_Structure = (D,R) D:数据元素的有穷集合,R:集合D上关系的有穷集合。
《The Art of Computer Programming》
Art Evans
数据结构在计算机科学中是一门综合性的专业基础课, 也是计算机专业的必修课,是其它许多课程的先修课程, 是设计编译程序、操作系统、数据库系统等系统程序和 大型应用程序的重要基础。
1.2 基本概念和术语
基本术语
数据 被计算机加工处理的对象。 数据元素(记录、表目) 数据的基本单位,
几种常用的运算有: (1)建立数据结构 (2)清除数据结构 (3)插入数据元素 (4)删除数据元素 (5)排序
(6)检索* (7)更新 (8)判空和判满* (9)求长*
*操作为引用型操作,即数据值不发生变化; 其它为加工型操作。
抽象数据类型
抽象数据类型 ADT( Abstract Data Type ): 数据类型概念的引伸。指一个数学模型以及在其上定义的操作集 合,与计算机无关。 数据类型:一组值的集合和定义在其上的一组操作的总称。
抽象数据类型的描述方法
ADT 抽象数据类型名 { 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉
} ADT 抽象数据类型名
其中基本操作的定义格式为:
基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉
数据结构ppt课件完整版

数据结构分类
根据数据元素之间关系的不同, 数据结构可分为线性结构、树形 结构、图形结构等。
4
数据结构重要性
01
02
03
提高算法效率
合理的数据结构可以大大 提高算法的执行效率,减 少时间和空间复杂度。
33
案例三:最小生成树在通信网络优化中应用
Kruskal算法
基于并查集实现,按照边的权值从小到大依次添加边,直到生成 最小生成树。
Prim算法
从某一顶点开始,每次选择与当前生成树最近的顶点加入,直到 所有顶点都加入生成树。
通信网络优化
最小生成树算法可用于通信网络优化,通过选择最优的通信线路 和节点,降低网络建设和维护成本。
2024/1/28
简化程序设计
数据结构的设计和实现可 以简化程序设计过程,提 高代码的可读性和可维护 性。
解决实际问题
数据结构是解决实际问题 的基础,如排序、查找、 图论等问题都需要依赖于 特定的数据结构。
5
相关术语解析
数据元素
数据元素是数据的基本 单位,通常作为一个整
体进行考虑和处理。
2024/1/28
02
队列的基本操作包括入队(enqueue)、出队( dequeue)、查看队首和队尾元素等。
03
队列的特点
2024/1/28
04
数据从队尾入队,从队首出队。
05
队列中元素的插入和删除操作分别在两端进行,因此也称 为双端操作。
06
队列中没有明显的头尾标记,通常通过计数器或循环数组 等方式实现。
15
栈和队列应用举例
绪论(数据结构教程PPT课件)

在网络传输或文件读写过程中,使 用队列作为缓冲区,暂时存储待处 理的数据,以提高处理效率。
04
串、数组和广义表
串定义及基本操作
串的基本操作包括
赋值操作、连接操作、求串长、比较操作、定位操作等。
串的存储结构包括
顺序存储结构和链式存储结构。
串模式匹配算法
串模式匹配算法是指在一个主串中寻找一个子串(模式串)的位置。
函数调用
在程序执行过程中,使用 栈来保存函数调用的信息, 如函数参数、局部变量和 返回地址等。
队列定义及基本操作
01
队列(Queue)是一种特殊的线性数据结构,其操作在表 的两端进行。一端称为队头(front),另一端称为队尾 (rear)。
02
队列的基本操作包括
03
入队(enqueue):在队尾插入一个元素。
3
线性表的抽象数据类型描述
数据类型名称、数据对象集合、操作集合等
线性表顺序存储结构
01
顺序存储结构的定义
用一段地址连续的存储单元依次存储线性表的数据元素
02
顺序存储结构的基本操作实现
创建、初始化、销毁、判空、清空、求长度、获取元素、修改元素等操
作的实现方法
03
顺序存储结构的优缺点
无需为表示表中元素之间的逻辑关系而增加额外的存储空间;可以快速
线索二叉树
线索二叉树是对二叉树的每个结点增设两个标志位以及一条线索而得到的。根据线索性质的不同,线索二叉树可分为前序线 索二叉树、中序线索二叉树和后序线索二叉树三种。这里以中序线索二叉树为例来说明线索二叉树的构造方法。
中序线索二叉树的构造规则是:若将二叉树的中序遍历序列中的每个结点都看作是相应指针域为空的指针,则称这些指针为 线索,而指向其前驱或后继的指针称为线索指针。加上线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树 (Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种 。
数据结构详解ppt课件

“数据结构知识导入全程目标•数据结构的基本概念–逻辑结构–物理结构–运算结构•数据结构的基本实现–堆栈–队列–链表–二叉树知识讲解数据结构的基本概念•数据结构是相互之间存在一种或多种特定关系的数据的集合•数据结构是计算机存储、组织数据的方式•数据结构的选择直接影响计算机程序的运行效率(时间复杂度)和存储效率(空间复杂度)•计算机程序设计=算法+数据结构•数据结构的三个层次–抽象层——逻辑结构–结构层——物理结构–实现层——运算结构识讲解•集合结构(集)–结构中的数据元素除了同属于一个集合外没有其它关系识讲解•线性结构(表)–结构中的数据元素具有一对一的前后关系识讲解•树型结构(树)–结构中的数据元素具有一对多的父子关系知识讲解实现双向线性链表•删除节点识讲解•树形结构的最简模型,每个节点最多有两个子节点•每个子节点有且仅有一个父节点,整棵树只有一个根节点•具有递归的结构特征,用递归的方法处理,可以简化算法•三种遍历序–前序遍历:D-L-R–中序遍历:L-D-R–后序遍历:L-R-D识讲解•二叉树的一般形式–根节点、枝节点和叶节点–父节点和子节点–左子节点和右子节点–左子树和右子树–大小和高度(深度)识讲解•满二叉树–每层节点数均达到最大值–所有枝节点均有左右子树知识讲解二叉树•完全二叉树–除最下层外,各层节点数均达到最大值–最下层的节点都连续集中在左边识讲解•顺序存储–从上到下、从左到右,依次存放–非完全二叉树需用虚节点补成完全二叉树识讲解•链式存储–二叉链表,每个节点包括三个域,一个数据域和两个分别指向其左右子节点的指针域识讲解•链式存储–三叉链表,每个节点包括四个域,一个数据域、两个分别指向其左右子节点的指针域和一个指向其父节点的指针域知识讲解实现有序二叉树•有序二叉树亦称二叉搜索树,若非空树则满足:–若左子树非空,则左子树上所有节点的值均小于等于根节点的值–若右子树非空,则右子树上所有节点的值均大于等于根节点的值–左右子树亦分别为有序二叉树•基于有序二叉树的排序和查找,可获得O(logN)级的平均时间复杂度知识讲解逻辑结构•网状结构(图)–结构中的数据元素具有多对多的交叉映射关系识讲解•顺序结构–结构中的数据元素存放在一段连续的地址空间中识讲解•顺序结构–随机访问方便,空间利用率低,插入删除不方便识讲解•链式结构–结构中的数据元素存放在彼此独立的地址空间中–每个独立的地址空间称为节点–节点除保存数据外,还需要保存相关节点的地址识讲解•链式结构–插入删除方便,空间利用率高,随机访问不方便知识讲解逻辑结构与物理结构的关系•每种逻辑结构采用何种物理结构实现,并没有一定之规,通常根据实现的难易程度,以及在时间和空间复杂度方面的要求,选择最适合的物理结构,亦不排除复合多种物理结构实现一种逻辑结构的可能知识讲解运算结构•创建与销毁–分配资源、建立结构、释放资源•插入与删除–增加、减少数据元素•获取与修改–遍历、迭代、随机访问•排序与查找–算法应用知识讲解数据结构的基本实现•堆栈–基于顺序表的实现–基于链式表的实现•队列–基于顺序表的实现–基于链式表的实现•链表–双向线性链表的实现•二叉树–有序二叉树(二叉搜索树)的实现知识讲解堆栈•后进(压入/push)先出(弹出/pop)识讲解•初始化空间、栈顶指针、判空判满识讲解•动态分配、栈顶指针、注意判空知识讲解队列•先进(压入/push)先出(弹出/pop)识讲解•初始化空间、前弹后压、循环使用、判空判满识讲解•动态分配、前后指针、注意判空知识讲解链表•地址不连续的节点序列,彼此通过指针相互连接•根据不同的结构特征,将链表分为:–单向线性链表–单向循环链表–双向线性链表–双线循环链表–数组链表–链表数组–二维链表识讲解•单向线性链表识讲解•单向循环链表识讲解•双向线性链表识讲解•双向循环链表识讲解•数组链表识讲解•链表数组识讲解•二维链表识讲解•结构模型识讲解•插入节点。
数据结构绪论 ppt课件

1.4 算法和算法分析
2019年3月2日星期六
算法和程序的主要区别:程序是用某种程序设计语言所书 写的一个计算过程。而算法并不一定表现为一个计算机程 序。它可以用不同方式和不同语言来描述。
BEGIN
1t 算法 2i DO UNTIL i>5 t×i t i+1i ENDDO PRINT t
作为描述工具。其描述语法见P10-11。
但上机时要用具体语言实现,如C或C++等
ppt课件 25 25
1.4 算法和算法分析
2019年3月2日星期六
Q1. 什么是算法?
Q2. 算法设计的要求?
Q3. 时间复杂度如何表示?
Q4. 空间复杂度如何表示?
ppt课件 26
26
1.4 算法和算法分析
2019年3月2日星期六
2019年3月2日星期六
【例1】数据管理问题—线性问题
ppt课件 8
8
1.1 什么是数据结构
2019年3月2日星期六
【例2】棋类对弈问题—树型结构
初始棋盘格局
第一步
x
x
x x
第二步
x0
x 0
x
0
x 0
第 N 步
x x x 0x 0x 0 x 0
ppt课件 9
x 0x x0
x 0x x 0
9
1.1 什么是数据结构
ppt课件 30
30
1.4 算法和算法分析
2019年3月2日星期六
3 算法分析
Q3. 时间复杂度如何表示?
• 算法分析方法
• 算法分析的两个主要方面
时间复杂度:算法对时间的需求。 T(n)=O(f(n))
数据结构.ppt

算法是对特定问题求解步骤的一种描述,
由有限的指令序列构成,其中每一条指令表示 一个或多个操作。
2020/5/12
数据结构
10
二、算法应具有的五个特性:
(1)输入 一个算法有零个或多个的输入,它们是算法 开始前给出的最初量
(2)输出 一个算法至少有一个输出,它们是同输入 有某种关系的量
(3)有穷性 每一条指令的执行次数必须是有限的 (4)确定性 每一条指令必须有确切的含义,无二义性 (5)可行性 每条指令的执行时间都是有限的。
while (ch!=‘$’) {s=malloc(sizeof(linklist));
s->data=ch;
s->next=head;
head=s;
ch=getchar( );
}
return head;
}
2020/5/12
数据结构
28
2.3.2 单链表上的基本运算(实现)
尾插法建表:将新结点插入到当前链表的表尾(需引入r)
申请一个结点 p=(linklist *)malloc(sizeof(linklist)); 释放一个结点 free(p);
2020/5/12
数据结构
26
2.3.2 单链表上的基本运算(实现)
1.建立单链表
方法:从一个空表开始,重复读入数据,生成新结点,将读入数 据存放在新结点的数据域,然后将新结点插入当前链表 中,直到结束。
集合上的一组操作。
4、数据结构
原子数据类型(atomic data type) 结构数据类型(aggregate data type)
• 数据的逻辑结构
• 数据的存储结构
• 数据的运算:既对数据施加的操作
数据结构(课堂PPT)

算机中,并被计算机识别、存储和处理 的符号的集合。数据的形式较多,例如
数据结构我的们前物面理所结述的构工资数报表据、结学构生成运绩算表的, 实现
一个家族关系的表示形式,表示一个群 体中个体之间关系的图形描述等。
9
1.2 基本术语
数 据 数据元素 字段(域)
是《数据结构》中的几类常见的数据结 构形式。如果数据中的元素之间没有关 系,则构成集合,这也是一种结构。
12
1.2 基本术语
数 据 数据元素 字段(域)
数据结构
数据结构的逻辑结构
我数们将据线结性构结构的、物树理型结结构构和图结数构据这结构运算的实现
几类结构称为逻辑结构,它包括数据元 素的表示和关系的表示。因为仅考虑了 元素之间的逻辑关系,而没有考虑到其 在计算机中的具体实现。
度量运行时间的方法:事后统计,事前分析估算 (常用后一种)。
19
•评价一个算法的时间性能主要标准是时间复杂度的数量级。
• 时间的复杂度是指算法中包含简单操作重复执行的次数,而 某个语句重复执行的次数就是该语句的频度。
• 可以记做:T(n)=O( f(n) ) 其中f(n)是问题规模n的某个函数, 一般是算法中频度最大的语句频度。
语句频度
1
时间复杂度
O(1) 常数阶
2. FOR( i=0; i<= n;i++)
n+1
3.
x:=x+1;
O(n) 线性阶
3. FOR( i=1; i<n;i++) FOR(j=0; j<n;j++) x:=x+1;
2024版《数据结构图》ppt课件

良好的数据结构可以带来更高的运 行或存储效率,是算法设计的基础, 对程序设计的成败起到关键作用。
常见数据结构类型介绍
线性数据结构
如数组、链表、栈、队 列等,数据元素之间存
在一对一的关系。
树形数据结构
如二叉树、多叉树、森 林等,数据元素之间存
在一对多的关系。
图形数据结构
由顶点和边组成,数据 元素之间存在多对多的
队列定义、特点及应用场景
队列的特点 只能在队尾进行插入操作,队头进行删除操作。
队列是一种双端开口的线性结构。
队列定义、特点及应用场景
应用场景 操作系统的任务调度。 缓冲区的实现,如打印机缓冲区。
队列定义、特点及应用场景
广度优先搜索(BFS)。
消息队列和事件驱动模型。
串定义、基本操作及实现方法
最短路径问题 求解图中两个顶点之间的最短路径,即路径上边 的权值之和最小。
3
算法介绍 Prim算法、Kruskal算法、Dijkstra算法、Floyd 算法等。
拓扑排序和关键路径问题探讨
拓扑排序
对有向无环图(DAG)进行排序, 使得对每一条有向边(u,v),均有
u在v之前。
关键路径问题
求解有向无环图中从源点到汇点 的最长路径,即关键路径,它决
遍历二叉树和线索二叉树
遍历二叉树
先序遍历、中序遍历和后序遍历。遍历算 法可以采用递归或非递归方式实现。
VS
线索二叉树
利用二叉链表中的空指针来存放其前驱结 点和后继结点的信息,使得在遍历二叉树 时可以利用这些线索得到前驱和后继结点, 从而方便地遍历二叉树。
树、森林与二叉树转换技巧
树转换为二叉树
加线、去线、层次调整。将树中的每个结点的所有孩子结点用线连接起来,再去掉与原结点相连的线,最后 将整棵树的层次进行调整,使得每个结点的左子树为其第一个孩子,右子树为其兄弟结点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Set of Neighbors B A B E C 4 2 3 4 1 E 2 C 7 D 6
2 7 1
3
C
B C D E
6 4
2
E D
6
Main Index
Contents
vertexInfo Object A vertexInfo object consists of seven data members. The first two members, called vtxMapLoc and edges, identify the vertex in the map and its adjacency set.
Graph Categories A graph is connected if each pair of vertices have a path between them A complete graph is a connected graph in which each pair of vertices are linked by an edge
4
A B E
B 2 7 C 3
A
C D
6
1 2 E
(a)
D
4
(b)
5
Main Index
Contents
Adjacency Set
Vertices Set of Neighbors B C B 1 1 1 D 1 C 1
(a)
A B
A B
E C
C D
D
E B 1
(b) 4
A B
Vertices A
locA edges inDegree = 1 A B locB C D locD locB vtxMap 3(D) 1 edges inDegree = 1 .... 2(C) 1 locD edges inDegree = 1 .... 3 locC 2 0 1 2 3 1 locA vInfo 0 .... 1(B) 1 2(C) 1 locC edges inDegree = 2 .... 0(A) 1
11
Main Index
Contents
Class Graph
Class graph{ { private: typedef map<T,int> vertexMap; vertexMap vtxMap; vector<vertexInfo<T> > vInfo; int numVertices; int numEdges; stack<int> availStack; int getvInfoIndex(const T& v) const;
10
Main Index
Contents
Class Neighbor
class neighbor { public: int dest; int weight;
neighbor(int d=0, int c=0): dest(d), weight(c){} friend bool operator< (const neighbor& lhs, const neighbor& rhs) { return lhs.dest < rhs.dest; } friend bool operator== (const neighbor& lhs, const neighbor& rhs) { return lhs.dest == rhs.dest; } };
container, called vtxMap, where a vertex name is the key of type T. The int field of a map object is an index into a vector of vertexInfo objects, called vInfo. The size of the vector is initially the number of vertices in the graph, and there is a 1-1 correspondence between an entry in the map and a vertexInfo entry in the vector
13
Main Index
Contents
Class Graph
public: void insertEdge(const T& v1, const T& v2, int w); void insertVertex(const T& v); void eraseEdge(const T& v1, const T& v2); void eraseVertex(const T& v); void clear(); iterator begin(); iterator end(); const_iterator begin() const; const_iterator end() const; }
Adjacency Set
Vertex v in a map vertexInfo Object
7
Main Index
Contents
Vertex Map and Vector vInfo
To store the vertices in a graph, we provide a map<T,int>
12
Main Index
Contents
Class Graph
public: graph(); graph(const graph<T>& g); int numberOfVertices() const; int numberOfEdges() const; bool empty() const; int getWeight(const T& v1, const T& v2) const; void setWeight(const T& v1, const T& v2, int w); int inDegree(const T& v) const; int outDegree(const T& v) const; set<T> getNeighbors(const T& v) const;
const set<neighbor>& edgeSet = vInfo[pos1].edges; set<neighbor>::const_iterator setIter;
if ((setIter = edgeSet.find(neighbor(pos2))) != edgeSet.end()) return (*setIter).weight; else return -1; }
vt xMapLoc edges inDegree occupied color mIt er (it erat or locat ion) vert ex index dat aValue dist ance
...
vt xMap
vInfo
Main Index Contents
index
8
VtxMap and Vinfo Example
Adjacency Matrix Adjacency Set vertexInfo Object Vertex Map and Vector vInfo
VtxMap and Vinfo Example
Breadth-First Search Algorithm Dfs()
1
Main Index
Contents
9
Main Index
Contents
Class VertexInfo
template <typename T> class vertexInfo { public: enum vertexColor { WHITE, GRAY, BLACK }; map<T,int>::iterator vtxMapLoc; set<neighbor> edges; int inDegree; bool occupied; vertexColor color; int dataValue; int parent; vertexInfo(): inDegree(0), occupied(true){} vertexInfo(map<T,int>::iterator iter): vtxMapLoc(iter), inDegree(0), occupied(true){} };
(a: Connected)
(b: Disconnected)
Main Index Contents
(c: Complete)
2
Example of Digraph Graph with ordered edges are called directed graphs or digraphs
A C B D E Vertices V = {A, B, C, D, E} Edges E = {(A,B), (A,C), (A,D), (B,D), (B,E), (C,A), (D,E)}
3
Main Index
Contents
Connectedness of Digraph Strongly connected if there is a path from any vertex to any other vertex. Weakly connected if, for each pair of vertices vi and vj, there is either a path P(vi, vj) or a path P(vi,vj).