南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第六章 集合与字典

第六章集合与字典 ·集合及其表示 ·并查集与等价类 字典 ·散列
第六章 集合与字典 • 集合及其表示 • 并查集与等价类 • 字典 • 散列 1

集合及其表示 集合基本概念 集合是成员(元素)的一个群集。集合中的成 员可以是原子(单元素),也可以是集合。 集合的成员必须互不相同。 在算法与数据结构中所遇到的集合,其单元 素通常是整数、字符、字符串或指针,且同 一集合中所有成员具有相同的数据类型。 . 例:colour={red,orange,yellow,green,, black,blue,purple,white 2
集合及其表示 • 集合是成员(元素)的一个群集。集合中的成 员可以是原子(单元素),也可以是集合。 • 集合的成员必须互不相同。 • 在算法与数据结构中所遇到的集合,其单元 素通常是整数、字符、字符串或指针,且同 一集合中所有成员具有相同的数据类型。 • 例:colour = { red, orange, yellow, green, black, blue, purple, white } 2 集合基本概念

.集合中的成员一般是无序的,但在表示 它时,常写在一个序列里。 常设定集合中的单元素具有线性有序关 系,此关系可记作“<”,表示“优先 于” 整数、字符和字符串都有一个自然线性 顺序。指针也可依据其在序列中安排的 位置给予一个线性顺序。 3
• 集合中的成员一般是无序的,但在表示 它时,常写在一个序列里。 • 常设定集合中的单元素具有线性有序关 系,此关系可记作“<”,表示“优先 于”。 • 整数、字符和字符串都有一个自然线性 顺序。指针也可依据其在序列中安排的 位置给予一个线性顺序。 3

AUB或A+BA⌒B或AXB A-B 集合(Set)的抽象数据类型 template class Set public: virtual Set(=0; /构造函数 virtual makeEmpty()=0; 川置空集合 virtual bool addMember (const Tx)=0; 4
集合(Set)的抽象数据类型 template class Set { public: virtual Set() = 0; //构造函数 virtual makeEmpty() = 0; //置空集合 virtual bool addMember (const T x) = 0; 4 AB 或 A+B AB 或 AB A-B A B A B A B

virtual bool delMember (const Tx)=0; virtual SetintersectWith(Set&R)=0; 川集合的交运算 yirtual SetunionWith(Set&R)=0; 川集合的并运算 virtual SetdifferenceFrom (Set&R)=0; 川集合的差运算 yirtual bool Contains(Tx)=0; virtual bool subSet (Set&R)=0; virtual bool operator ==(Set&R)=0; /判集合是否相等 }; 5
virtual bool delMember (const T x) = 0; virtual Set intersectWith (Set& R) = 0; //集合的交运算 virtual Set unionWith (Set& R) = 0; //集合的并运算 virtual Set differenceFrom (Set& R) = 0; //集合的差运算 virtual bool Contains (T x) = 0; virtual bool subSet (Set& R) = 0; virtual bool operator == (Set& R) = 0; //判集合是否相等 }; 5

用位向量实现集合抽象数据类型 当集合是全集合{0,1,2,,n}的一个子集 且n是不大的整数时,可用位(0,1)向量来实 现集合。 当全集合是由有限个可枚举的成员组成时,可 建立全集合成员与整数0,1,2,..的一一对应 关系,用位向量来表示该集合的子集。 一个二进位有两个取值1或0,分别表示在集合 与不在集合。如果采用16位无符号短整数数组 bit Vector[作为集合的存储,就要考虑如何求 出元素i在bit Vector数组中的相应位置。 6
用位向量实现集合抽象数据类型 • 当集合是全集合 { 0, 1, 2, …, n } 的一个子集, 且 n 是不大的整数时,可用位(0, 1)向量来实 现集合。 • 当全集合是由有限个可枚举的成员组成时,可 建立全集合成员与整数 0, 1, 2, …的一一对应 关系,用位向量来表示该集合的子集。 • 一个二进位有两个取值1或0,分别表示在集合 与不在集合。如果采用16位无符号短整数数组 bitVector[ ]作为集合的存储,就要考虑如何求 出元素 i 在bitVector数组中的相应位置。 6

集合的位向量(bit Vector)类的定义 #include #include const int DefaultSize 50; template class bitSet 川用位向量来存储集合元素,集合元素的范围在0到 /setSize-1之间。数组采用16位无符号短整数实现 public: bitSet (int sz DefaultSize); /构造函数 bitSet (const bitSet&R); /复制构造函数 bitSet ()delete ]bit Vector; /析构丞数 unsigned short getMember(const Tx);/读取集合 元素X 7
集合的位向量(bit Vector)类的定义 #include #include const int DefaultSize = 50; template class bitSet { //用位向量来存储集合元素, 集合元素的范围在0到 //setSize-1之间。数组采用16位无符号短整数实现 public: bitSet (int sz = DefaultSize); //构造函数 bitSet (const bitSet& R); //复制构造函数 ~bitSet () { delete [ ]bitVector; } //析构函数 unsigned short getMember (const T x); //读取集合 元素x 7

void putMember (const Tx,unsigned short v);/ 将值V送入集合元素X void makeEmpty () 川置空集合 for (int i=0;i&operator =(const bitSet&R); bitSet&operator +(const bitSet&R); bitSet&operator (const bitSet&R); bitSet&operator -(const bitSet&R); bool Contains (const Tx); /判x是否集合this的成员
void putMember (const T x, unsigned short v); // 将值v送入集合元素x void makeEmpty () { //置空集合 for (int i = 0; i & operator = (const bitSet& R); bitSet& operator + (const bitSet& R); bitSet& operator * (const bitSet& R); bitSet& operator - (const bitSet& R); bool Contains (const T x); //判x是否集合this的成员 8

bool subSet(bitSet&R);/判this是否R的子集 bool operator ==(bitSet&R); /判集合this与R相等 friend istream&operator >>(istream&in, bitSet&R); 川输入 friend ostream&operator &R); /输出 private: int setSize; /集合大小N int vectorSize; /位数组大小 unsigned short *bit Vector; /存储集合元素的位数组 9
bool subSet (bitSet& R); //判this是否R的子集 bool operator == (bitSet& R); //判集合this与R相等 friend istream& operator >> (istream& in, bitSet& R); //输入 friend ostream& operator & R); //输出 private: int setSize; //集合大小 int vectorSize; //位数组大小 unsigned short *bitVector; //存储集合元素的位数组 }; 9

使用示例 bitSets1,s2,s3,s4,s5;bool index,equal; for (int k=0;k<10;k++ /集合赋值 s1.addMember (k); s2.addMember(k+7); /s1:{0,1,2,,9}, s2:{7,8,9,,16} s3=S1+s2; 1/求s1与s2的并{0,1,,16} s4=S1*s2; 1/求s1与s2的交{7,8,9} s5=s1-s2; /求s1与s2的差{0,1,,6 10
使用示例 bitSet s1, s2, s3, s4, s5; bool index, equal; for (int k = 0; k < 10; k++) { //集合赋值 s1.addMember (k); s2.addMember(k+7); } //s1: {0, 1, 2, …, 9}, s2: {7, 8, 9, …, 16} s3 = s1+s2; //求s1与s2的并 {0, 1, …, 16} s4 = s1*s2; //求s1与s2的交 {7, 8, 9} s5 = s1-s2; //求s1与s2的差 {0, 1, …, 6} 10
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第五章 树.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第四章 数组、串与广义表.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第三章 栈和队列.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第二章 线性表.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第十章 文件、外部排序与外部搜索.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第一章 绪论.ppt
- 计算机系统结构课程教材:计算机科学丛书《深入理解计算机系统》【兰德尔E.布莱恩特、大卫R.奥哈拉伦】原书第三版(中文版)PDF电子书(共十二章)Computer Systems A Programmer's Perspective.pdf
- 上海交通大学:《高级计算机系统结构》课程教学资源(讲稿).pdf
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第09章 新型计算机病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第08章 移动智能终端恶意代码.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第07章 Linux病毒技术.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第06章 宏病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第05章 特洛伊木马(Trojan horse).ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第04章 传统计算机病毒.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第03章 计算机病毒结构及技术分析.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第02章 计算机病毒理论模型.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第01章 计算机病毒概述(刘功申).ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第12章 计算机病毒防治策略.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第11章 常用杀毒软件及其解决方案.ppt
- 上海交通大学:《恶意代码与计算机病毒(原理、技术和实践)》课程教学资源(PPT课件)第10章 计算机病毒的防范技术.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第七章 搜索结构.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第八章 图.ppt
- 南京大学:《数据结构 Data Structures》课程教学资源(PPT课件讲稿)第九章 排序.ppt
- 中国科学院高能所计算中心:高能物理数据的存储和管理(汪璐).pptx
- 中国科学院高能所计算中心:数据技术课程 CSC 2018 Data Technologies Exercises(CSC DT 2018 Introduction).pdf
- 中国科学院高能所计算中心:数据技术上机 Data Technologies – CERN School of Computing 2019.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Writing Parallel software(pres).pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Writing Parallel software(booklet).pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Practical vectorization-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Practical vectorization-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Modern programming languages for HEP-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Modern programming languages for HEP-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Structuring data for efficient I/O-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Structuring data for efficient I/O-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Many ways to store data-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Many ways to store data-booklet.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Preserving data-pres.pdf
- 中国科学院:CERN专题计算学校《T-CSC数据存储》课程教学资源(讲义)Optimizing existing large codebase-pres.pdf