数据结构-集合:JavaScript语言描述

这篇博客介绍了集合这一数据结构,包括其无序性、唯一性以及空集和全集的概念。文章详细阐述了集合的交集、并集和补集操作,并展示了使用JavaScript实现的集合类,包括添加、删除成员及显示集合的方法。此外,还提供了并集、交集和补集的计算方法。
摘要由CSDN通过智能技术生成

集合

集合是一种包含不同元素的数据结构。集合中的元素称为成员。集合中的成员是无序的,集合中不允许相同元素存在。
集合是由一组无序但是彼此之间有相关性的成员构成的,每个成员在集合中只能出现一次。

集合的定义

  • 不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。
  • 如果两个集合的成员完全相同,则称这两个集合相等。
  • 如果一个集合中的所有元素是全部包含于另一个集合,那么前一个集合是后一个集合的子集。

对集合的操作

  1. 并集:将两个集合的成员进行合并,形成一个集合
  2. 交集:两个集合中共同存在的成员组成一个新的集合
  3. 补集:属于一个集合而不属于另一个集合的成员组成的集合

方法

  • add:向集合中添加成员
  • remove:从集合中删除成员
  • show:显示集合中的成员

set类的实现

function Set(){
    this.dataStore = [];
    this.size = 0;
}

// 工具函数
Set.prototype.indexOf = function (element) {
    return this.dataStore.indexOf(element);
} 

Set.prototype.add = function (element) {
    if(this.indexOf(element) !== -1){
        return false;
    } else {
        this.dataStore.push(element);
    }
}

Set.prototype.remove = function (element) {
    let index = this.indexOf(element);
    if(index !== -1){
        this.dataStore.splice(index, 1);
    } else {
        return false;
    }
}

Set.prototype.show = function () {
    return this.dataStore.toString();
}

// 交集
Set.prototype.union = function (set) {
    let unionSet = new Set();
    let tempStore = set.dataStore;
    for(let i = 0; i < this.dataStore.length; i++){
        unionSet.dataStore.concat(set.dataStore.filter((ele) => {
            return ele === this.dataStore[i];
        }));
    }
    return unionSet;
}

// 并集
Set.prototype.interset = function (set) {
    let intersetSet = new Set();
    let tempStore = set.dataStore;
    for(let i = 0; i < this.dataStore.length; i++){
        tempStore = tempStore.filter((ele) => {
            return ele !== this.dataStore[i];
        });
    }

   intersetSet.dataStore = intersetSet.dataStore.concat(this.dataStore, tempStore);  
   return intersetSet;
}

// 补集
Set.prototype.diference = function (set){
    let difSet = new Set();
    for(let i = 0; i < this.dataStore.length; i++){
        if(set.dataStore.every((ele) => {
            return ele !== this.dataStore[i];
        })){
            difSet.dataStore.push(this.dataStore[i]);
        }
    }
    return difSet;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端御书房

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值