集合--数据结构与算法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.数组的缺点 数组不总是组织数据的最佳数据结构,原因如下. 在很多编程语言中,数组的长度是固定的,所以当数组已被数据填满时,再要加入新的元素就会非常困难. 在数组中,添加和删除元素也很麻烦,因为需要 ...
随机推荐
- 猿创|有赞的zan framework安装与使用
1.准备工作 1.1 一台腾讯云服务器2核CPU+2G内存的Linux CentOS 7.2(谢谢小杨同学@erchoc) 1.2 预装lnmp一键安装包环境,官方地址:lnmp一键安装包 (如不会使 ...
- linux内核编译与开发
一.Linux内核简介linux kernel map: linux 系统体系结构: linux kernel体系结构: arm有7种工作模式,x86也实现了4个不同级别RING0-RING3,RIN ...
- Qt 制作2048小游戏
相信大家都玩过2048把,下面是我用qt写得2048小游戏. 2048.pro HEADERS += \ Widget.h SOURCES += \ Widget.cpp \ main.cpp QT ...
- Jmeter入门2 http请求—简单的get请求
发送一个简单的get http请求 1 启动Jmeter,在测试计划上点击鼠标右键>添加>Threads(Users)>线程组 2 线程组界面.可设置线程数,几秒启动所有线程,循环次 ...
- C++11之 Move semantics(移动语义)(转)
转https://blog.csdn.net/wangshubo1989/article/details/49748703 按值传递的意义是什么? 当一个函数的参数按值传递时,这就会进行拷贝.当然,编 ...
- lua 语句学习
就如同C里的if else,while,do,repeat.就看lua里怎么用: 1.首先看if else t = {1,2,3} local i = 1 if t[i] and t[i] % 2 = ...
- LA 3415 保守的老师
题目链接:https://vjudge.net/contest/161820#problem/E 题意: 有一些同学,要从中选出一些同学来,人数尽量多,但是,两两之间要满足至少一个条件(身高差> ...
- java读取资源文件(Properties)
四步: java代码 //new一个读取配置文件 Properties properties=new Properties(); //获取文件路径 String path=request.getSer ...
- 下载YouTube视频的网站和工具
1.界面友好,可选择的清晰度较多(我个人用这个比较多) http://en.savefrom.net/ 2.几乎可以解析到所有的清晰度 http://www.clipconverter.cc 3.可选 ...
- 如何用Redlock实现分布式锁
转载请标明出处: http://blog.csdn.net/forezp/article/details/70305336 本文出自方志朋的博客 之前写过一篇文章<如何在springcloud分 ...