集合--数据结构与算法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.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
随机推荐
- JSP简要
本篇知识导图 说起JSP,当年做课程设计什么的都用的这个,虽然技术比较古老,但是还是挺广泛使用的. JSP是一种前台的展现语言,在mvc里面属于表现层.它主要由静态,动态两部分组成,静态包括HTML, ...
- oracle 表 视图 存储过程 序列 job
table 表 --delete table drop table Test1; -- Create table create table TEST1 ( ID NUMBER, T_N ...
- Visual Stuio 2010 常用快捷及操作
1.如果你想复制一行代码(超级长,鼠标拖老久的),只需要在这行的空白处 CTRL+C 同理,剪贴一行 CTRL+X 删除一行 CTRL+L 2.显示方法里的参数,以前每次都是手动删括号. CTRL+S ...
- ubuntu桌面
gnome-desktop-item-edit ~/Desktop/ --create-new
- (转)超级实用且不花哨的js代码大全
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- Android学习笔记_36_ListView数据异步加载与AsyncTask
一.界面布局文件: 1.加入sdcard写入和网络权限: <!-- 访问internet权限 --> <uses-permission android:name="andr ...
- 【题解】UVA11584 Partitioning by Palindromes
UVA11584 https://www.luogu.org/problemnew/show/UVA11584 暑假开始刷lrj紫/蓝书DP题 这几天做的一道 思路 预处理出所有的回文串是否存在 前提 ...
- shell命令查看某文件夹下的文件个数
shell命令查看某文件夹下的文件个数 2010-06-25 17:05:15| 分类: shell |字号 订阅 1.查看某文件夹下文件的个数: ls -l |grep "^-&qu ...
- iOS10 开发权限适配设置 崩溃(上传打包后构建版本一直不显示)
ios10 系统必须强制配置系统权限 如果不配置,调试的时候导致崩溃,还会引发包无效的问题,导致上传打包后构建版本一直不显示 解决方案1.在项目中找到info.plist文件,右键点击以 Source ...
- 2822: [AHOI2012]树屋阶梯
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1161 Solved: 694[Submit][Status][Discuss] Descriptio ...