博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构02
阅读量:7091 次
发布时间:2019-06-28

本文共 2753 字,大约阅读时间需要 9 分钟。

1、集合

集合是由一组无序且唯一(不能重复)的项组成的。这个数据结构使用了与有限集合相同的数学概念,但应用在计算机科学的数据结构中。

在数学中,集合是一组不同的对象(的集)。

比如说:一个由大于或等于0的证书组成的自然数集合:N = { 0, 1, 2, 3, 4, 5, 6, ... },集合中的对象列表用{}包围。

集合是由一组一(即不能重的项组成的。这个数据结构使用了与有..合相同的数学..,但应用在.算..学的数据结构中。

目前 中已内置了 Set 类型的实现,出于学习目的,下面我们依旧使用Javascript创建一个集合类:

知识储备:

Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,

值的顺序与使用循环的顺序相同 ( 区别在于 for-in 循环枚举原型链中的属性 )。

Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接

枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致。

 delete 操作符用于删除对象的某个属性;如果没有指向这个属性的引用,那它最终会被释放。

class Set {    constructor() {        this.items = {}    }    has(value) {        return this.items.hasOwnProperty(value)    }    add(value) {        if (!this.has(value)) {            this.items[value] = value            return true        }             return false    }    remove(value) {        if (this.has(value)) {            delete this.items[value]            return true        }        return false    }    get size() {        return Object.keys(this.items).length    }    get values() {        return Object.keys(this.items)    }}

2)

  • 并集:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合。
  • 交集:对于给定的两个集合,返回一个包含两个集合中均有元素的新集合。
  • 差集:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合。
  • 子集:求证一个给定集合是否是另一集合的子集。
  • //求交集function cross(set1, set2) {    if (typeof set1.items !== 'object' || typeof set2.items !== 'object') return {}    let crossGroup = new Set()    for (var key in set1.items) {        if (set2.items[key]) {            crossGroup.items[key] = set1.items[key]        }    }    return crossGroup}//求并集function gather(set1, set2) {    if (typeof set1.items !== 'object' || typeof set2.items !== 'object') return {}    let allGroup = new Set()    for (let key in set1.items) {        allGroup.items[key] = set1.items[key]    }    for (let key in set2.items) {        if (!allGroup.items[key]) {            allGroup.items[key] = set2.items[key]        }    }    return allGroup}//求差集function differens(set1, set2) {    if (typeof set1.items !== 'object' || typeof set2.items !== 'object') return {}    let differens1 = new Set()    let differens2 = new Set()    let crossGroup = cross(set1, set2).items    for (let key in set1.items) {        if (!crossGroup[key]) {            differens1.add(set1.items[key])        }    }    for (let key in set2.items) {        if (!crossGroup[key]) {            differens2.add(set2.items[key])        }    }    return [differens1.items, differens2.items]}//判断是否是子集function isSon(set1, set2) {    if (typeof set1.items !== 'object' || typeof set2.items !== 'object') return false    let crossGroup = cross(set1, set2).items    let son = set1.size > set2.size ? set2.items : set1.items    for (let key in son) {        if (!crossGroup[key]) {            return false        }    }    return true}

转载于:https://www.cnblogs.com/Tanqurey/p/10720338.html

你可能感兴趣的文章
vue基础
查看>>
Eclipse中安装MemoryAnalyzer插件及使用
查看>>
GEF入门实例_总结_02_新建初始RCP空项目
查看>>
用js来实现那些数据结构04(栈01-栈的实现)
查看>>
你的api加锁了吗?
查看>>
关于C++、PHP和Swoole
查看>>
.NET快速信息化系统开发框架 V3.2-Web版本“产品管理”事例编辑界面新增KindEditor复文本编辑控件...
查看>>
浅谈直播行业发展前景和发展方向
查看>>
2- OpenCV+TensorFlow 入门人工智能图像处理-opencv入门
查看>>
Flink1.4 窗口触发器与Evictors
查看>>
几个与文本处理相关的Linux命令总结
查看>>
django模板详解(二)
查看>>
ASM概述
查看>>
手动删除数据库 oracle
查看>>
浅析ConcurrentHashMap
查看>>
html中header结构详解
查看>>
日常使用
查看>>
jQuery实现还能输入N字符
查看>>
su命令
查看>>
使用Wisdom RESTClient进行自动化测试,如何取消对返回的body内容的校验?对排除的JSON属性字段不做校验?...
查看>>