数据结构之集合的顺序存储结构https://www.jianshu.com/p/f8a7d52787eb
集合的定义
昨天我们聊了 数据结构的由来与分类 ,根据数据之间关系的不同,我们把数据结构分为了四类逻辑结构,其中第一类就是集合结构。今天我们就来详细的讲一下集合结构。
集合是数据逻辑结构中的一种,它是由一个或者多个没有任何关系的数据元素聚集而成,集合中各个数据元素之间不存在任何逻辑依赖关系。跟数学中的集合一样,集合中不会有相同的数据元素。
下图可是个集合示意图(各个美女都处在同一个篮子里,但是他们之间没有任何关系哦),你get到了吗?
集合的抽象数据类型
要想从与语言无关的层次描述集合,那就是抽象数据类型,抽象数据类型包括数据和操作两部分,数据部分为集合,可以用任何一种存储方式存储,比如昨天讲的顺序存储结构和链式存储结构,这两种存储结构我们都会讲到。操作部分是对集合的各种运算,包括插入元素、删除元素、查找元素等等。
集合的抽象数据类型定义如下:
ADT Set is
Data:
采用任何一种存储方法存储的一个集合
Operation:
initSet() //初始化集合
add(obj)//添加元素
remove(obj)//删除元素
find(obj)//查找元素并返回
value(i)//返回集合中第i个元素的值
contains(obj)//集合中是否包含某个元素
size()//获取集合的长度
isEmpty//判断集合是否为空
clear()//清空集合
output()//输出集合中的所有值
union(set)//求两个集合的并集
intersection(set) //求两个集合的交集
集合的顺序存储结构和操作实现
集合的顺序存储要求地址空间是连续的,地址必须一个接一个,不能中断。如下图为顺序存储结构:
顺序存储结构
顺序存储的每个节点只包含数据部分,不需要额外包含数据之间的关系,因为数据之间的关系通过地址连续来体现,所以非常省空间(这点好处对于集合来说无所谓,因为集合元素之间没有关系,所以集合之间的元素可以随便放入顺序存储结构中。但是对于有序的线性结构来说就有好处了,线性表后面说。)
它的优点访问非常快速,因为地址是连续的,只要知道首地址,任意一个元素的地址都可以算出来。假设每个地址占c个空间,则第i个地址为(i-1)*c。
它的缺点是在插入和删除数据时,可能要移动许多数据,比如一个10000个元素的有序数据,如果我删除了第二个元素,为了继续保持地址连续,所以要把后面9999个元素都向前移动。
但是对于集合来说,插入和删除不需要移动很多元素,只要移动一个元素就行了,因为集合本就是无序的,假入我删除了10000个元素的第二个元素,为了保持地址连续,我只要把最后一个元素移动到已删除的第二个元素的位置上就行了。
我用Java实现集合的顺序存储结构,根据上面的抽象数据类型的操作,首先定义一个接口Set,包含集合的各种操作,然后让子类实现该接口,覆写各种操作方法,并且子类用数组来存储数据部分
Set接口
集合的顺序存储结和构操作实现如下图代码,详细说明都在注释里面
SequenceSet类
其中对于插入、删除、查找元素、contains、输出集合的每个元素等操作都是O(n)的时间复杂度,
对于获取第i个元素、初始化集合、获取集合长度、集合判空、清空集合的时间复杂度都是O(1)的。
对于求并集和交集的时间复杂度都是O(m*n),m、n分别代表两个集合的长度。
测试类:
马上就要凌晨一点半了!!!明天还要上班!一不小心就写了两三个小时了,别看内容不多,代码可都是一个个码的,码完经过测试才敢发出来,今晚就聊到这里了,集合的顺序存储结构比较简单,明天接着聊集合的链式存储结构,欢迎大家吐槽关注,谢谢
作者:理想是一盏灯
链接:https://www.jianshu.com/p/f8a7d52787eb
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
- 数据结构之有序线性表的顺序存储结构 https://www.jianshu.com/p/9be27627740f
- 数据结构之栈的顺序存储结构https://www.jianshu.com/p/5b8e17232df2
- 数据结构之队列――顺序存储结构(php代码实现――方法二)
- 数据结构笔记(一)线性表的顺序表示和基本操作及其顺序表实现的集合运算(A-B)U(B-A)实例
- C++数据结构——埃拉托斯特尼筛法以及求集合的交集,并集,差集
- 【数据结构】顺序存储结构线性表C语言版
- 集合详解(一):Collection以及简单数据结构
- 对象数组, 集合, 数据结构
- 数据结构集合题目
- 数据结构(三)——基于顺序存储结构的线性表
- python入门-数据结构-集合
- 数据结构——线性表的顺序存储结构
- 数据结构05——集合与映射
- 【Python】10、python内置数据结构之集合
- 数据结构之线性表的顺序存储结构
- 一 数据结构中的顺序存储结构和链式存储结构
- 数据结构之线性表的顺序存储结构
- 数据结构之线性表――顺序存储结构(php代码实现)
- 【数据结构基础】线性表的顺序存储结构
- Redis-数据结构(字符串集合set)