<script>
function Set(){
var items = {};//使用对象表示集合,因为js对象不允许一个键指向两个不同的值,保证集合里面的匀速唯一性 this.add = function(value){
//向集合添加一个新的项
if(!this.has(value)){
items[value] = value;
return true;
}
return false;
} this.remove = function(value){
//从集合移除一个值
if(this.has(value)){
delete items[value];
return true;
}
return false;
} this.has = function(value){
//判断值是否在集合中,返回布尔值
// return value in items;
//第二种方法
return items.hasOwnProperty(value);
} this.clear = function(){
//清空集合
items = {};
} this.size = function(){
//返回集合的元素数量
return Object.keys(items).length;
} this.values = function(){
//返回一个包含集合中所有值的数组
return Object.keys(items);
} /*
title:集合操作
1.并集;2.交集;3.差集;4.子集
*/ this.union = function(otherSet){
//并集
var unionSet = new Set();
var values = this.values();
for(let i=0;i<values.length;i++){
unionSet.add(values[i]);
}
values = otherSet.values();
for(let i=0;i<values.length;i++){
unionSet.add(values[i]);
}
return unionSet;
} this.intersection = function(otherSet){
//交集
var intersectionSet = new Set();
var values = this.values();
for(let i=0;i<values.length;i++){
if(otherSet.has(values[i])){
intersectionSet.add(values[i]);
}
}
return intersectionSet;
} this.difference = function(otherSet){
//差集
var differenceSet = new Set();
var values = this.values();
for(let i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
differenceSet.add(values[i]);
}
}
return differenceSet; } this.subset = function(otherSet){
//子集
if(this.size()>otherSet.size()){
return false;
}else{
var values = this.values();
for(var i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
return false;
}
}
return true;
}
} }
//set集合使用 // var set = new Set();
// set.add(1);
// console.log(set.values()); //输出["1"]
// console.log(set.has(1)); //输出true
// console.log(set.size()); //输出1
// set.add(2);
// console.log(set.values()); //输出["1", "2"]
// console.log(set.has(2)); //true
// console.log(set.size()); //2
// set.remove(1);
// console.log(set.values()); //输出["2"]
// set.remove(2);
// console.log(set.values()); //输出[]
var setA = new Set();
setA.add(1);
setA.add(2);
setA.add(3);
var setB = new Set();
setB.add(3);
setB.add(4);
setB.add(5);
setB.add(6);
var unionAB = setA.union(setB);
console.log(unionAB.values());
var intersectionAB = setA.intersection(setB);
console.log(intersectionAB.values())
var differenceAB = setA.difference(setB);
console.log(differenceAB.values()) </script>

js数据结构与算法——集合的更多相关文章

  1. JavaScript数据结构与算法-集合练习

    集合的实现 function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; ...

  2. JS数据结构与算法——栈

    JS数据结构与算法--栈 1.栈结构概念 栈(Stack)是一种先进后出(LIFO Last in First out)的线性表,先进栈的将会比后进栈的先出栈. 栈的限制是仅允许在一端进行插入和删除运 ...

  3. JS数据结构与算法-概述

    JS数据结构与算法概述 数据结构: 计算机存储, 组织数据的方式, 就像锅碗瓢盆 算法: 一系列解决问题的清晰指令, 就像食谱 两者关系: 程序 = 数据结构 + 算法 邂逅数据结构与算法 什么是数据 ...

  4. JS数据结构与算法--双向链表

    双向链表中链接是双向的:一个链向下一个元素,另一个链向上一个元素,如下图所示: 双向链表结构代码如下: class Node { constructor(element) { this.element ...

  5. JS数据结构及算法(二) 队列

    队列是遵循先进先出的一种数据结构,在尾部添加新元素,并从顶部移除元素. 1.普通队列 function Queue() { this.items = []; } Queue.prototype = { ...

  6. JS数据结构及算法(一) 堆栈

    最近在看<学习JavaScript数据结构与算法>这本书,感觉自己又涨知识了 哈哈... 现在将自己看的做个总结,也是巩固理解. 栈:先进后出,新添加和待删除的元素都保存在栈顶.可以用数组 ...

  7. js数据结构与算法存储结构

    数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...

  8. js数据结构与算法--单链表的实现与应用思考

    链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...

  9. JS数据结构与算法 - 剑指offer二叉树算法题汇总

    ❗❗ 必看经验 在博主刷题期间,基本上是碰到一道二叉树就不会碰到一道就不会,有时候一个下午都在搞一道题,看别人解题思路就算能看懂,自己写就呵呵了.一气之下不刷了,改而先去把二叉树的基础算法给搞搞懂,然 ...

随机推荐

  1. AI佳作解读系列(三)——深度学习中的合成数据研究

    Below are some investigation resources for synthetic datasets: 1. Synthetic datasets vs. real images ...

  2. Python基础:数据类型-字符串(7)

    1.字符串基本操作 字符串是由字符组成的一串字符序列,字符串是有顺序的,从左到右,索引从0开始,依次递增. Python中字符串类型:str. Python中字符串的三种表示方式: (1)普通字符串: ...

  3. mysql-笔记-默认值

    1 指定列的默认值 columnName int default '-1' 2 integer 列-设置自增列 也是指定默认值的方式 3 默认值必须是常量 不能使用函数.表达式---特例:timest ...

  4. NLP句子表征,NLP 的巨人肩膀(下):从 CoVe 到 BERT (转载)

    深度长文:NLP的巨人肩膀(上):https://www.jiqizhixin.com/articles/2018-12-10-17 NLP 的巨人肩膀(下):从 CoVe 到 BERT: https ...

  5. The Preliminary Contest for ICPC China Nanchang National Invitational I. Max answer (单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题目大意:一个区间的值等于该区间的和乘以区间的最小值.给出一个含有n个数的序列(序列的值有正有负),找到该序列的区间最大 ...

  6. hbuilder、hbuilderx和vscode对比

    1. 从内存来对比 1.1 vscode占用内存 打开同一个项目,发现vscode占用内存比较多 1.2 HBuilder占用内存 1.3 HBuilderx占用内存 1.4 对比 从内存上来看,HB ...

  7. Centos6安装Percona-tools工具

    Centos6安装Percona-tools工具 环境:centos6.x yum -y install perl-DBI yum -y install perl-DBD-MySQL yum -y i ...

  8. LDM与STM指令详解

    title: LDM与STM指令详解 date: 2019/2/26 17:58:00 toc: true --- LDM与STM指令详解 指令形式如下,这里的存储方向是针对寄存器的 Load Mul ...

  9. I/O模型系列之一:Linux I/O模型基本概念

    1. IO模型矩阵 基本 Linux I/O 模型的简单矩阵: 同步与异步:描述的是用户线程与内核的交互方式. 同步IO和异步IO的区别就在于:数据拷贝的时候进程是否阻塞! 同步是指用户线程发起IO请 ...

  10. 计算机网络(HTTP)之客户识别:cookie机制

    什么是cookie? 承载用户相关信息的HTTP首部 cookie的工作原理 cookie的缺陷 一.什么是cookie? cookie是由服务器生成,发送给USER-Agent(一般是浏览器),(服 ...