数据结构之集合的顺序存储结构

作者: 理想是一盏灯 | 来源:发表于2018-01-18 22:19 被阅读13226次

集合的定义

昨天我们聊了 数据结构的由来与分类 ,根据数据之间关系的不同,我们把数据结构分为了四类逻辑结构,其中第一类就是集合结构。今天我们就来详细的讲一下集合结构。

集合是数据逻辑结构中的一种,它是由一个或者多个没有任何关系的数据元素聚集而成,集合中各个数据元素之间不存在任何逻辑依赖关系。跟数学中的集合一样,集合中不会有相同的数据元素。

下图可是个集合示意图(各个美女都处在同一个篮子里,但是他们之间没有任何关系哦),你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分别代表两个集合的长度。

测试类:


马上就要凌晨一点半了!!!明天还要上班!一不小心就写了两三个小时了,别看内容不多,代码可都是一个个码的,码完经过测试才敢发出来,今晚就聊到这里了,集合的顺序存储结构比较简单,明天接着聊集合的链式存储结构,欢迎大家吐槽关注,谢谢

相关文章

  • 数据结构之集合的链式存储结构

    前面讲了 ‘’谈谈数据结构之集合的顺序存储‘’,今天接着讲集合的链式存储,链式存储不像顺序存储要求存储的地址空间是...

  • 数据结构

    一. 数据结构的分类 集合结构 线性结构 树形结构 图形结构 二. 数据结构的存储 顺序存储结构 和 链式存储结构...

  • 基础知识

    1.数据结构的分类 逻辑结构:集合结构,线性结构,树形结构,图结构 物理结构:顺序存储,链式存储,索引存储,散列存...

  • 数据结构-学习记录

    数据结构的分类1.逻辑结构-----集合、树形,图型、树型、线性结构2.物理结构-----顺序存储、链式存储。(查...

  • 大话数据结构摘录

    数据结构的不同维度 逻辑结构集合结构线性结构树形结构图形结构 物理结构顺序存储结构链式存储结构 算法的定义 算法是...

  • 数据结构之线性表的链式存储结构

    之前写了线性表的顺序存储结构和有序线性表的顺序存储结构,今天接着写线性表的链式存储结构 数据结构之线性表的顺序存储...

  • 数据结构零碎

    数据结构按逻辑分分为线性结构(集合,线性表)和非线性结构(树,图) 按照储存结构分分为顺序存储结构,链式存储结构,...

  • 数据结构之集合的顺序存储结构

    集合的定义 昨天我们聊了 数据结构的由来与分类 ,根据数据之间关系的不同,我们把数据结构分为了四类逻辑结构,其中第...

  • 面试基础复习

    1.数据结构的存储 数据结构的存储一般常用的有两种: 顺序存储结构 和 链式存储结构。顺序存储结构和链式存储结构的...

  • 数据结构之队列的链式存储结构

    之前写了队列的顺序存储结构,队列的定义及操作见 数据结构之队列的顺序存储结构 队列的链式存储结构与操作实现 队列接...

网友评论

    本文标题:数据结构之集合的顺序存储结构

    本文链接:https://www.haomeiwen.com/subject/sujgoxtx.html