数据结构PPT(第八章)

合集下载

数据结构第八章_排序

数据结构第八章_排序

49 38 65 97 76
三趟排序:4 13 27 38 48 49 55 65 76 97
算法描述
#define T 3 int d[]={5,3,1};
例 13 48 97 55 76 4 13 49 27 38 65 49 27 38 65 48 97 55 76 4 j j j
j
j
i
例 初始: 49 38 65 97 76 13 27 48 55 4 取d1=5 49 38 65 97 76 13 27 48 55 4 一趟分组:
一趟排序:13 27 48 55 4 取d2=3 13 27 48 55 4 二趟分组:
49 38 65 97 76 49 38 65 97 76
二趟排序:13 4 48 38 27 49 55 65 97 76 取d3=1 13 27 48 55 4 三趟分组:
初始时令i=s,j=t
首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp
交换 再从i所指位置起向后搜索,找到第一个关键字大于x的记录, 和rp交换 重复上述两步,直至i==j为止 再分别对两个子序列进行快速排序,直到每个子序列只含有 一个记录为止
快速排序演示
算法描述
算法评价

38 49 49 38 65 76 97 13 97 76 97 27 13 30 97 27 97 30 初 始 关 键 字
38 49 65 13 76 27 76 13 30 76 27 76 30 97 第 一 趟
38 49 13 65 27 65 13 30 65 27 65 30
38 13 49
时间复杂度
最好情况(每次总是选到中间值作枢轴)T(n)=O(nlog2n) 最坏情况(每次总是选到最小或最大元素作枢轴)

数据结构之第8章 广义表

数据结构之第8章  广义表

3. 建立广义表的链式存储结构
假定广义表中的元素类型ElemType为char类型,
每个原子的值被限定为英文字母。
并假定广义表是一个表达式,其格式为:元素之
间用一个逗号分隔,表元素的起止符号分别为左、右
圆括号,空表在其圆括号内不包含任何字符。例如
“(a,(b,c,d))”就是一个符合上述规定的广义表格式。
/*广义表结点类型定义*/
广义表的两种基本情况 :
g2 1

g1
1

∧*Βιβλιοθήκη * 第 1 个元素**

*
*

第 2 个元素
第 n 个元素
(a)空表
(b)非空表
为原子的情况 :
g3 0 a

8.3 广义表的运算
1. 求广义表的长度 在广义表中,同一层次的每个结点是通过link域
链接起来的,所以可把它看做是由link域链接起来的
{ h->tag=1;
/*新结点作为表头结点*/
h->val.sublist=CreatGL(s); /*递归构造子表并链到表头结点*/ }
else if (ch==')') h=NULL; /*遇到')'字符,子表为空*/ else { h->tag=0; /*新结点作为原子结点*/ h->val.data=ch; } } else h=NULL; ch=*s; s++; if (h!=NULL) if (ch==',') h->link=CreatGL(s); else h->link=NULL; return h; }
单链表。这样,求广义表的长度就是求单链表的长度,

数据结构(八)查找

数据结构(八)查找
122
99
250
110
300
280
类C程序实现: void InsertBST(*&t,key) //在二叉排序树中插入查找关键字key { if(t= = NULL){ t=new BiTree; t->lchild=t->rchild=NULL; t->data=key; return; } if(key<t->data ) InsertBST(t->lchild,key); else InsertBST (t->rchild, key ); } void CreateBiTree(tree,d[ ],n) //n个数据在数组d中,tree为二叉排序树根 { tree=NULL; for(i=0;i<n;i++) InsertBST(tree,d[i]); }
p q
void delete(*&p) { if(p->rchild = = NULL) { q=p; p=p->lchild; delete q; } else if(p->lchild= =NULL) { q=p; p=p->rchild; delete q; } else { q=p; s=p->lchild; while(s->rchild!=NULL) {q=s; s=s->rchild;} p->data=s->data; if(q!=p) q->rchild=s->lchild; else q->lchild=s->lchild; } delete s; }
在xL中选值最大的代替x,该数据按二叉排序树的性质应在 最右边。
f x f s c

数据结构ppt(c语言版李春葆)

数据结构ppt(c语言版李春葆)
查找的结果为给出整个记录的信息,或指示该记录在查找 表中的位置;
否则称“查找不成功”,此时查找的结果可给出一个 “空”记录或“空”指针。
如何进行查找? 取决于查找表的结构,即记录在查找表中所处的位置。然 而,查找表本身是一种很松散的结构,因此,为了提高查找 的效率,需要在查找表中的元素之间人为地附加某种确定的 关系,即用另外一种结构来表示查找表。
int length; //表长度 }SSTable;
11
顺序查找(Sequential Search)的查找过程:从表中最后一个 记录开始,逐个进行记录的关键字和给定值的比较,若某个记 录的关键字和给定值比较相等,则查找成功,找到所查记录; 反之,若直至第一个记录,其关键字和给定值比较都不等,则 表明表中没有所查记录,查找不成功。
对查找表经常进行的操作有: (1)查询某个“特定的”数据元素是否在查找表中; (2)检索某个“特定的”数据元素的各种属性; (3)在查找表中插入一个数据元素; (4)从查找表中删除某个数据元素。
2
查找表的分类: 静态查找表(Static Search Table):
若对查找表仅作查询和检索操作,则称此类查找表为静 态查找表。在查找过程中,查找表本身不发生变化。
对静态查找表进行的查找操作称为静态查找。
动态查找表(Dynamic Search Table): 在查找过程中同时插入查找表中不存在的数据元素,或
者从查找表中删除已存在的某个数据元素,此类表为动态查 பைடு நூலகம்表。
3
关键字(Key): 是数据元素(或记录)中某个数据项的值,用它可以标
识(识别)一个数据元素(或记录)。 若此关键字可以唯一地标识一个记录,则称此关键字为
10
8.1.1 顺序表的查找

数据结构之查找课件PPT课件

数据结构之查找课件PPT课件

索引表的定义
struct indexterm {
keytype key; int low, high; }; typedef struct indexterm index[MAXITEM]; 这里的keytype可以是任何相应的数据类型, 如int、float、或char等,在算法中,我们规 定keytype缺省是int类型。
int blksearch (sqlist r, index idx, int k, bn)
{
/*bn为块的个数*/
int i, j, mid, low=1, high=bn, find=0;
while (low<=high && !find)
{
➢ 顺序查找的优点是算法简单、适应面广,且 不要求表中数据有序。缺点是平均查找长度 较大,特别是当n较大时,查找效率较低, 不宜采用。
2.折半查找
➢ 折半查找又称二分查找(Birary search)。 ➢ 假设记录在查找表R[1…n]中按关键字排列有
序。首先用k与查找表中间元素的关键字比 较,。。。。。。
➢ 在实际应用问题中,每个记录一般包含 有多个数据域,查找是根据其中某一个 指定的域进行的,这个作为查找依据的 域称为关键字(key)。
➢ 顺序查找的线性表定义如下:
Typedef struct rectype {
keytype key; itemtype item1 …… }rectype;
➢ 比较结果有三种可能:
⑴ 如果r[m].key>k,说明如果存在欲查找的元素, 该元素一定在数组的前半部分,查找范围缩小了 一半,修改查找范围的的上界high=m-1,继续对 数组的前半部分进行二分查找;

数据结构ppt课件完整版

数据结构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
栈和队列应用举例

数据结构严蔚敏(全部章节814张PPT)-(课件)

数据结构严蔚敏(全部章节814张PPT)-(课件)
① 集合:结构中的数据元素除了“同属于一个集合” 外,没有其它关系。
② 线性结构:结构中的数据元素之间存在一对一的 关系。
③ 树型结构:结构中的数据元素之间存在一对多的 关系。
④ 图状结构或网状结构:结构中的数据元素之间存 在多对多的关系。
图1-3 四类基本结构图
1.1.3 数据结构的形式定义
数据结构的形式定义是一个二元组: Data-Structure=(D,S)
计算机求解问题的一般步骤
编写解决实际问题的程序的一般过程:
– 如何用数据形式描述问题?—即由问题抽象出一个 适当的数学模型; – 问题所涉及的数据量大小及数据之间的关系; – 如何在计算机中存储数据及体现数据之间的关系? – 处理问题时需要对数据作何种运算? – 所编写的程序的性能是否良好? 上面所列举的问题基本上由数据结构这门课程来回答。
其中:D是数据元素的有限集,S是D上关系的有限集。 例2:设数据逻辑结构B=(K,R)
K={k1, k2, …, k9} R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>, <k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6> } 画出这逻辑结构的图示,并确定那些是起点,那些是终点
<基本操作名>(<参数表>) 初始条件: <初始条件描述> 操作结果: <操作结果描述>
– 初始条件:描述操作执行之前数据结构和参数应 满足的条件;若不满足,则操作失败,返回相应的出 错信息。

数据结构严蔚敏PPT(完整版)

数据结构严蔚敏PPT(完整版)
排序算法的时间复杂度
时间复杂度是衡量算法效率的重要指标,常见的 排序算法的时间复杂度有O(n^2)、O(nlogn)、 O(n)等。
查找的基本概念和算法
查找的基本概念
查找是指在一个已经有序或部分 有序的数据集合中,找到一个特 定的元素或一组元素的过程。
常见查找算法
常见的查找算法包括顺序查找 、二分查找、哈希查找等。
先进先出(FIFO)的数据 处理。
并行计算中的任务调度。
打印机的打印任务管理。
二叉树的层序遍历(宽度 优先搜索,BFS)。
04
树和图
树的基本概念和性质
树的基本概念
树是一种非线性数据结构,由节 点和边组成,其中节点表示实体 ,边表示实体之间的关系。
树的性质
树具有层次结构,节点按照层次 进行排列,每个节点最多只能有 一个父节点,除了根节点外。
isEmpty:判断队列是否为空。
enqueue:向队尾添加一个元素。
front 或 peek:查看队首元素。
dequeue:删除队首的元素。
栈和队列的应用
栈的应用 后进先出(LIFO)的数据处理。
括号匹配问题。
栈和队列的应用
队列的应用
深度优先搜索(DFS)。 表达式求值。
01
03 02
栈和队列的应用
数据结构严蔚敏ppt( 完整版)
contents
目录
• 绪论 • 线性表 • 栈和队列 • 树和图 • 排序和查找 • 数据结构的应用案例分析
01
绪论
数据结构的基本概念
总结词
数据结构是计算机存储和组织数据的方式,是算法和数据操 作的基础。
详细描述
数据结构是计算机科学中研究数据的组织和存储方式的学科 ,它决定了数据在计算机中的表示和关系。数据结构不仅包 括数据的逻辑结构,还涉及到数据的物理存储方式以及数据 的操作方式。

数据结构(C语言)第八章 排序

数据结构(C语言)第八章 排序

直接插入排序过程
0 21 1 25 2 49 3 4 25* 16 5 08 temp
i=1
0 21
21
1 25
25 25
2 49
49 49
3 4 25* 16
25* 16 25* 16
5 08
08 08
temp 25
i=2
21
49
21
25
25 25
49
49 25*
25* 16
25* 16 49 16
希尔排序 (Shell Sort)

基本思想设待排序对象序列有 n 个对象, 首 先取一个整数 gap < n 作为间隔, 将全部对 象分为 gap 个子序列, 所有距离为 gap 的对 象放在同一个子序列中, 在每一个子序列中 分别施行直接插入排序。然后缩小间隔 gap, 例如取 gap = gap/2,重复上述的子序列划 分和排序工作。直到最后取 gap == 1, 将所 有对象放在同一个序列中排序为止。 希尔排序方法又称为缩小增量排序。
第八章 排序
概述
插入排序
交换排序 选择排序 归并排序 基数排序 各种内排方法比较
概 述

排序: 将一个数据元素的任意序列,重新
排列成一个按关键字有序的序列。

数据表(datalist): 它是待排序数据对象的
有限集合。

主关键字(key): 数据对象有多个属性域,
即多个数据成员组成, 其中有一个属性域可用 来区分对象, 作为排序依据,称为关键字。也 称为关键字。
直接插入排序 (Insert Sort)

基本思想 当插入第i (i 1) 个对象时, 前面的 R[0], R[1], …, R[i-1]已经排好序。这时, 用 R[i]的关键字与R[i-1], R[i-2], …的关键字顺 序进行比较, 找到插入位臵即将R[i]插入, 原 来位臵上的对象向后顺移。

第八章 图(Graph)PPT课件

第八章 图(Graph)PPT课件
Graph->Arcs[v][w] = 0; }
15
2、邻接表 (Adjacency List)表示法
实际上是一种顺序存储与链式存储相结合的方法。顺序存储 部分用来存储图中顶点的信息,链式部分用来保存图中边 (弧)的信息。
一个一维数组,每个数据元素包含以下信息:
Vertex FirstArc
邻接单链表的每个结点(边结点)的结构如下 AdjVertex Weight NextArc
16
# define MAXNODE <图中结点的最大个数>
typedef struct arc {
int AdjVertex; int Weight; struct arc * NextArc; }arctype; // 邻接链表结点结构
typedef struct {
elemtype Vertext; arctype * FirstArc; }vertextype; // 顺序表结构
在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
12
网络的邻接矩阵 W (i,j), 如i果 !j且 <i,jE或 (i,j)E
A.Ed[i]gj[]e= , 否但 则i是 !,=j 0, 对角 i=线 j=
13
用邻接矩阵表示的图的类型的定义
#define MAXNODE 100
✓权 某些图的边具有与它相关的数, 称之为权。这 种带权图叫做网络。
8
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
施工进度图
60
A
B 40 80 C
30

数据结构.ppt

数据结构.ppt

注意: 1.数据元素ai是一个抽象的符号 2. ai可取各种数据类型 3. 一般情况下,同一线性表中的元素具有相同的数据类型 4. i是元素的序号 (1<=i<=n)
2.逻辑特征:仅有一个开始结点和一个终端结点,并且所有结 点都最多只有一个直接前趋和一个直接后继
2019/9/18
数据结构
18
二、线性表的运算
数据结构
15
第一章 概 论
本章要求:
1、掌握数据、数据元素、数据结构等基本概念。 2、掌握数据逻辑结构和物理结构的分类。 3、学会算法分析的基本方法。
2019/9/18
数据结构
16
第二章 线性表
本章要学习的主要内容 1、线性表的逻辑结构及基本运算 2、线性表的顺序存储结构 3、线性表的链式存储结构:单链表、循环链表、双 链表、静态链表 4、顺序表和链表的比较
(1)头插法建表 (2)尾插法建表
头插法建表:将新结点插入到当前链表的表头
Head c
b
a^
2
sd
1
优点:算法简单
缺点: 链表中结点次序和输入次序相反
2019/9/18
数据结构
27
Linklist *CREATLIST( )
Head c
b
a^
{ char ch;
2
sd
1
linklist *head,*s; head=NULL; ch=getchar( );
2019/9/18
数据结构
17
2.1 线性表的概念及运算
一、逻辑结构 1.描述: 线性表是由n (n>=0)个数据元素(点)a1,a2,….,ai,….,an
组成的有限序列。其中,数据元素的个数n定义为表长。 当n=0时称为空表,非空的线性表(n>0)记为: (a1,a2,….,ai,…..,an)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并查集
静态搜索表
二叉搜索树

AVL树
1
并查集 (Union-Find Sets)


并查集支持以下三种操作: Union (Root1, Root2) //合并操作 Find (x) //搜索操作 InitUFSets (s ) //初始化操作 对于并查集来说,每个集合用一棵树表示。 为此,采用树的双亲表示作为集合存储表示。 集合元素的编号从0到 n-1。其中 n 是最大 元素个数。

按树高度合并 高度高的树的根结点作根
-0
0
1
-0
2
-0
3
-0
4
-0
5
-0 -2
6
-0
-2 1
2
3
-1
0 Union(2, 0) 0
5 1
2
0 5 0
16
2
4 3
2
2
4 3
2
3
6 3
2 6 3
Union操作的折叠规则

为进一步改进树的性能,可以使用如下折叠 规则来“压缩路径”。即: 如果 j 是从 i 到 根 root 的 路 径 上 的 一 个 结 点 , 且 S>parent[j] != root[j], 则把 S->parent[j] 臵 为 root[i]。 0 0 6 1 7 9 8 6 7 1 9 3

Find和Union操作性能不好。假设最初 n 个 元素构成 n 棵树组成的森林,S->parent[i] = -1。做处理Union(n-2, n-1), …, Union(1, 2), Union(0, 1)后,将产生退化的树。
11

合并
3
4 -2
0
-1
1
-1
2
-1
3
-1
4
-1
0 1 2
-5 0
2



在双亲表示中,第 i 个数组元素代表包含 集合元素 i 的树结点。初始时, 根结点的 双亲为-1,表示集合中的元素个数。 在同一棵树上所有结点所代表的集合元素 在同一个子集合中。 为此,需要有两个映射: 集合元素到存放该元素名的树结点间的 对应; 集合名到表示该集合的树的根结点间的 对应。
2
3
-3
1
2
-4
3
2
3 3
1
2 3 3
1
2 3
Union(3,4) 4
Union(2,3)
4
4
Union(1,2) Union(0,1)
12
执行一次Union操作所需时间是 O(1),n-1 次Union操作所需时间是O(n)。 若再执行Find(0), Find(1), …, Find(n-1), 若 被搜索的元素为 i,完成 Find(i) 操作需要时 间为O(i),完成 n 次搜索需要的总时间将达 到 n 2 O( i ) O( n )
3

设 S1= {0, 6, 7, 8 }, S2= { 1, 4, 9 }, S3= { 2, 3, 5}
集合名 指针
0 S1 1 S2 2 S3
0 6 7 8 1
4 9 3
2 5

为简化讨论,忽略实际的集合名,仅用表 示集合的树的根来标识集合。
4



初始时, InitUFSets(S) 构造一个森林, 每棵 树只有一个结点, 表示集合中各元素自成一 个子集合 S[i] = -1, i = 0, 1, …, n-1。 用 Find(S, i) 寻找集合元素 i 的根。 如果有两个集合元素 i 和 j: Find(S, i) == Find(S, j) 表明这两个元素在同一个集合中, 如果两个集合元素 i 和 j 不在同一个集合 中,可用 Union(S, i, j) 将它们合并到一个集 合中。
23
顺序搜索 (Sequential Search)


所谓顺序搜索, 又称线性搜索, 主要用于在 线性结构中进行搜索。 设若表中有 n 个对象,则顺序搜索从表的 先端 (或后端) 开始, 顺序用各对象的关键 码与给定值 x 进行比较, 直到找到与其值相 等的对象, 则搜索成功; 给出该对象在表中 的位臵。 若整个表都已检测完仍未找到关键码与x相 等的对象, 则搜索失败。给出失败信息。
18
静态搜索表
搜索(Search)的概念
所谓搜索,就是在数据集合中寻找满足某 种条件的数据对象。 搜索的结果通常有两种可能: 搜索成功,即找到满足条件的数据对象 这时,作为结果, 可报告该对象在结构中 的位臵, 还可给出该对象中的具体信息。 搜索不成功,或搜索失败。作为结果, 应报告一些信息, 如失败标志、位臵等。

19


通常称用于搜索的数据集合为搜索结构, 它是由同一数据类型的对象(或记录)组成。 在每个对象中有若干属性,其中有一个属 性,其值可唯一地标识这个对象。称为关 键码。使用基于关键码的搜索,搜索结果 应是唯一的。但在实际应用时,搜索条件 是多方面的,可以使用基于属性的搜索方 法,但搜索结果可能不唯一。
ASLsucc pi (n i 1)
i 1
26
n
在等概率情形,pi = 1/n, i = 1, 2, , n。
n
ASLsucc
1 1 n(n 1) n 1 (n i 1) . n 2 2 i 1 n
在搜索不成功情形,ASLunsucc = n+1.
17
5
8
3
5
从 i = 5 压缩路径
int CollapsingFind (UFSets *S, int i ) { //使用折叠规则的搜索算法 int j = i; while ( S->parent[j] >= 0 ) j = S->parent[j]; //让 j 循双亲指针走到根 while ( i != j ) { //换 parent[i] 到 j int temp = S->parent[i]; S->parent[i] = j; i = temp; } return j; }
5
下标
0
1
2
3
4
5
6
7
8
9
parent -4
4 -3 2 -3 2
0
0 0
4
集合 S1, S2 和 S3 的双亲表示
0 6 7 S1 8 1 4 9 3 2 5
S2
S3
6
下标
0
1
2
3
4
5
6
7
8
9
parent -7
4 -3 2 0
2
0
0 0
4
集合 S1 S2 和 S3 的双亲表示
0 6 7 8 1 4 9 6 0 7 4 1 8
基于有序顺序表的顺序搜索算法
int SequentSearch ( dataList A, DataType x ) { //在数据表 A.data[0..n-1] 中顺序搜索关键码 为 x 的数据对象 for ( int i = 0; i < A.n; i++ ) if ( A.data[i].key == x ) return i; //成功 else if ( A.data[i].key > x ) break; return -1; //顺序搜索失败, 返回失败信息 }

i 1

改进的方法 按树的结点个数合并 按树的高度合并 压缩元素的路径长度
13

按树结点个数合并 结点个数多的树的根结点作根
-1
0
1
-1
2
-1
3
-1
4
-1
5
-1 -7
6
-1
-5 1
2
3
-2
0 Union(2, 0) 0
5 1
2
0 5 0
14
2
4 3
2
2
4 3
2
3
6 3
2 6 3
void WeightedUnion (UFSets *S, int Rt1, int Rt2 ) { //按Union的加权规则改进的算法 int temp = S->parent[Rt1] + S->parent[Rt2]; if ( S->parent[Rt2] < S->parent[Rt1] ) { S->parent[Rt1] = Rt2; //Root2中结点多 S->parent[Rt2] = temp; //Root1指向Root2 } else { S->parent[Rt2] = Rt1; //Root1中结点多 S->parent[Rt1] = temp; //Root2指向Root1 } } 15
20

实施搜索时有两种不同的环境。 静态环境,搜索结构在插入和删除等操 作的前后不发生改变。 静态搜索表 动态环境,为保持较高的搜索效率, 搜 索结构在执行插入和删除等操作的前后 将自动进行调整,结构可能发生变化。 动态搜索表
21
静态搜索表结构的定义
#define MaxSize 100 typedef int DataType; typedef struct { DataType key; other; } ListNode; //搜索表最大尺寸 //搜索数据的类型 //搜索表结点定义 //关键码域 //其他数据域
int Find (UFSets * S, int x ) { if ( S->parent [x] < 0 ) return x; else return Find (S, S->parennion (UFSets *S, int Root1, int Root2) { //求两个不相交集合Root1与Root2的并 S->parent[Root1] += S->parent[Root2]; S->parent[Root2] = Root1; //将Root2连接到Root1下面 }
相关文档
最新文档