集合 Set


概念 (跟高中时数学课上学的集合几乎一模一样哦哈哈)

集合是一种包含不同元素的数据结构。

集合中的元素称为成员。

集合的两个最重要的特性:

  1. 集合中的成员是无序的。
  2. 集合中不允许相同成员存在。

空集:不包含任何成员的集合。

全集:包含一切可能成员的集合。

如果两个集合的成员完全相同,则称两个集合相等。

如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。

对集合的操作:

  • 并集:将两个集合中的成员进行合并,得到一个新集合。
  • 交集:两个集合中共同存在的成员组成一个新的集合。
  • 补集:属于一个集合而不属于另一个集合的成员组成的集合。

Set类的实现

构造函数的定义
function Set( ){
this.dataStore = [];
this.add = add;
this.remove = remove;
this.size = size;
this.union = union;
this.intersect = intersect;
this.subset = subset;
this.difference = difference;
this.show = show;
}
add 向集合中添加一个元素
function add(data){
if( this.dataStore.indexOf(data) < 0 ){
this.dataStore.push(data);
return true;
}else {
return false;
}
}
remove 从集合中移除一个元素
function remove(data){
var pos = this.dataStore.indexOf(data);
if(pos > -1){
this.dataStore.splice(pos, 1);
return true;
}else {
return false;
}
}
show 显示集合中的成员
function show() {
return this.dataStore;
}
contains 检查一个成员是否属于该集合
function contains(data){
return this.dataStore.indexOf(data) > -1;
}
union 求并集
function union(set){
var temp = new Set();
for(var i = 0; i < this.dataStore.length; i ++){
temp.add(this.dataStore[i]);
}
for(var i = 0; i < set.dataStore.length; i ++){
if(!temp.contains(set.dataStore[i])){
temp.add(set.dataStore[i]);
}
}
return temp;
}
intersect [,intə'sekt] 求交集
function intersect(set){
var temp = new Set();
for(var i = 0; i < this.dataStore.length; i ++){
set.contains(this.dataStore[i]) && temp.add(this.dataStore[i]);
}
return temp;
}
size 获取该集合的大小
function size(){
return this.dataStore.length;
}
subset 判断该集合是否是参数集合的子集
function subset(set){
if(this.size() > set.size()){
return false; 
}else { }
}
difference 求补集 a.difference(b)得到的是属于a但不属于b的成员组成的集合
function difference(set){
var temp = new Set();
for(var i = 0; i < this.dataStore.length; i ++){
!set.contains(this.dataStore[i]) && temp.add(this.dataStore[i]);
}
return temp;
}

PS:

总体来说,集合这章的内容还是挺容易理解的,但是目前来说,我还是不知道实际项目中什么场景下要用到集合来存储数据,待以后慢慢悟吧

集合--数据结构与算法JavaScript描述(9)的更多相关文章

  1. 《数据结构与算法JavaScript描述》

    <数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...

  2. 翻阅《数据结构与算法javascript描述》--数组篇

    导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...

  3. 数据结构与算法javascript描述

    <数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...

  4. 列表的实现-----数据结构与算法JavaScript描述 第三章

    实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); book ...

  5. 《数据结构与算法JavaScript描述》中的一处错误

    最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...

  6. 数据结构与算法 Javascript描述

    数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得

  7. 读后感:数据结构与算法JavaScript描述

    本书看完,对常见的数据结构与算法从概念上有了更深入的理解. 书中关于数组.栈和队列.链表.字典.散列.集合.二叉树.图.排序.检索.动态规划.贪心算法都有详细的介绍.算是一本不错的学习书籍. 栈和队列 ...

  8. 读《数据结构与算法 Javascript描述》 | 平淡无奇

    “平淡无奇”,一句话总结. 当初买这本书的原因,在意的是有没有什么令人惊喜的东西,特别是针对Javascript代码的奇思妙想,所以就买下了这本书. 在买的几本书里面,最先看的也是这一本,但看起目录就 ...

  9. 数据结构与算法JavaScript描述——链表

    1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...

随机推荐

  1. JSP-Servlet中文乱码

    客户端 get 方法时 出现乱码: 解决办法: String str1 = request.getParameter("stuname"); String str = new St ...

  2. 怎样下载YouTube播放列表视频

    YouTube上面的视频种类丰富多彩,要是你想利用上面的资源来学习的话,足够你钻研很长时间了.如果你想在YouTube上面学习一门教程,比如Python,通常这些内容一个视频肯定装不下,会分为好多个视 ...

  3. IOS 应用管理(九宫格) 总结笔记

    1. 开发前的思路 ========================================1> 从mainBundle中加载Plist2> 按照plist中的数据数量先确定各个a ...

  4. Objective-C(装箱和拆箱)

    概述 从前面的博文我们也可以看到,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消息的也就是说有些NSObject的方法是无法调用的,这个时候 ...

  5. CF25E Test

    嘟嘟嘟 因为只有三个字符串,所以就有一个比较暴力的做法:枚举这三个串所有排列,然后对于每一个排列,减去这三个串两两的公共部分的长度,更新答案. 求公共部分自然想到kmp:比如s[1]接在s[0]后面, ...

  6. HDU 5536 Chip Factory 【01字典树删除】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5536 Chip Factory Time Limit: 18000/9000 MS (Java/Ot ...

  7. maven学习记录一——maven介绍及入门

    1       Maven的简介 1.1     什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 1.2     Maven好处 普通的传统项目 M ...

  8. 【luogu P4568 [JLOI2011]飞行路线】 题解

    题目链接:https://www.luogu.org/problemnew/show/P4568 卡了一晚上,算是分层图最短路的模板.注意卡SPFA,所以我写了个SLF优化. 同时 AC400祭!~ ...

  9. 在VS2010 中使用subversion 进行代码的分支与合并

    在实际开发总,遇到了这种情况: 开发版本1,开发版本2 ,更新产品时要求1在前,2在后. 但是因为时间要求,必须2个版本同时开发.这时就想到了在svn的版本分支合并. 创建分支之前,首先把当前版本代码 ...

  10. Unity3d获得Android和ios设备的唯一标识

    android为mac地址,ios为advertisingIdentifier 函数都比较简单,网上也搜得到,我也就不多说了,主要是对于我们没做过安卓和IOS开发的人来说,整合进工程有各种的问题. 我 ...