集合--数据结构与算法JavaScript描述(9)
集合 Set
概念 (跟高中时数学课上学的集合几乎一模一样哦哈哈)
集合是一种包含不同元素的数据结构。
集合中的元素称为成员。
集合的两个最重要的特性:
- 集合中的成员是无序的。
- 集合中不允许相同成员存在。
空集:不包含任何成员的集合。
全集:包含一切可能成员的集合。
如果两个集合的成员完全相同,则称两个集合相等。
如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。
对集合的操作:
- 并集:将两个集合中的成员进行合并,得到一个新集合。
- 交集:两个集合中共同存在的成员组成一个新的集合。
- 补集:属于一个集合而不属于另一个集合的成员组成的集合。
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)的更多相关文章
- 《数据结构与算法JavaScript描述》
<数据结构与算法JavaScript描述> 基本信息 作者: (美)Michael McMillan 译者: 王群锋 杜欢 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9 ...
- 翻阅《数据结构与算法javascript描述》--数组篇
导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScript 中的数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性 ...
- 数据结构与算法javascript描述
<数据结构与算法javascript描述>--数组篇 导读: 这篇文章比较长,介绍了数组常见的操作方法以及一些注意事项,最后还有几道经典的练习题(面试题). 数组的定义: JavaScri ...
- 列表的实现-----数据结构与算法JavaScript描述 第三章
实现一个列表 script var booklist = new List(); booklist.append('jsbook'); booklist.append('cssbook'); book ...
- 《数据结构与算法JavaScript描述》中的一处错误
最近在看<数据结构与算法JavaScript描述>这本书,看到选择排序这部分时,发现一个比较大的错误. 原书的选择排序算法是这样的: function selectionSort() { ...
- 数据结构与算法 Javascript描述
数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得
- 读后感:数据结构与算法JavaScript描述
本书看完,对常见的数据结构与算法从概念上有了更深入的理解. 书中关于数组.栈和队列.链表.字典.散列.集合.二叉树.图.排序.检索.动态规划.贪心算法都有详细的介绍.算是一本不错的学习书籍. 栈和队列 ...
- 读《数据结构与算法 Javascript描述》 | 平淡无奇
“平淡无奇”,一句话总结. 当初买这本书的原因,在意的是有没有什么令人惊喜的东西,特别是针对Javascript代码的奇思妙想,所以就买下了这本书. 在买的几本书里面,最先看的也是这一本,但看起目录就 ...
- 数据结构与算法JavaScript描述——链表
1.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
随机推荐
- Angular 5.x 学习笔记(2) - 生命周期钩子 - 暂时搁浅
Angular 5.x Lifecycle Hooks Learn Note Angular 5.x 生命周期钩子学习笔记 标签(空格分隔): Angular Note on cnblogs.com ...
- msysGit删除github文件
首先打开msysGit命令行工具 首先使用命令 git rm xxx 删除远程文件 提交删除操作 git commit -m "test" ,并推送到远程仓库 git push o ...
- 笨办法学Python(三十九)
习题 39: 列表的操作 你已经学过了列表.在你学习“while 循环”的时候,你对列表进行过“追加(append)”操作,而且将列表的内容打印了出来.另外你应该还在加分习题里研究过 Python 文 ...
- The Tao to Excellent 2
就算自己现在的技术水平很菜,就算自己现在写的代码还是很烂,但我们还是要一直坚持在最前线,一直向上,也许,在前方,就有不一样的风景在等着我们. 因为我深深明白到一件事:人之所以选择混吃等死,是因为他们根 ...
- POSIX多线程—线程基本概念
http://blog.csdn.net/livelylittlefish/article/details/7957007 作者:阿波链接:http://blog.csdn.net/livelylit ...
- python:类与对象命名空间、面对对象的组合用法
1,类里可以定义两种属性: #静态属性 #静态属性就是直接在类中定义的变量 #动态属性 #动态属性就是定义在类中的方法 class Course: language = ['Chinese']#静态属 ...
- 六、修改 IntelliJ IDEA 模板注释中的 user 内容
咱们进一步了解了 IntelliJ IDEA 的个性化设置功能,包括主题和字体的常用设置等,修改后,具体的效果,如下图所示: 观察上图,不知道大家有没有注意到:IntelliJ IDEA 自带模板注释 ...
- 【洛谷P1118】数字三角形
数字三角形 题目链接 4 16 3 1 2 4 3 1 2 4 (3+1) (1+2) (2+4)(3+1+1+2) (1+2+2+4) (3+1+1+1+2+2+2+4)16=1*3+3*1+3*2 ...
- 【题解】洛谷P1445 [Violet]樱花 (推导+约数和)
洛谷P1445:https://www.luogu.org/problemnew/show/P1445 推导过程 1/x+1/y=1/n! 设y=n!+k(k∈N∗) 1/x+1/(n!+k)=1 ...
- SQL批量添加,更新,删除
SQL语句: 存储过程: 代码: 这里说的是关于SQL的批量操作数据. 需要准备: 三层框架:利用 动软代码生成器(可以快速生成增删改查) 生成三层 Model,BLL,Dal ①DbHelpeSQL ...