集合

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

集合中的元素称为成员。

集合的两个最重要特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。

code

function Set(){
var me = this;
me.dataStore = [];
me.add = add;
me.remove =remove;
me.size = size;
me.union = union;
me.intersect = intersect;
me.subset = subset;
me.difference = difference;
me.show = show;
me.contains = contains; function add(data){
if(me.dataStore.indexOf(data)<0){
me.dataStore.push(data)
me.dataStore.sort();
return true;
}else{
return false;
}
}
function remove(data){
var pos = me.dataStore.indexOf(data);
if(pos>-1){
me.dataStore.splice(pos,1)
return true;
}else{
return false;
} } /**
* 合并集合
* @param set
*/
function union(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
tempSet.add(me.dataStore[i])
}
for(var i=0;i<set.dataStore.length;i++){
if(!tempSet.contains(set.dataStore[i])){
tempSet.add(set.dataStore[i])
}
}
return tempSet;
} /**
* 寻找交集
*/
function intersect(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
if(set.contains(me.dataStore[i])){
tempSet.add(me.dataStore[i])
}
}
return tempSet;
} /**
* 判断是否子集
* @param set
* @returns {boolean}
*/
function subset(set){
if(me.size()>set.size()) {
return false;
}else{
for(var i in me.dataStore){
if(!(set.contains(me.dataStore[i]))){
return false;
}
} }
return true; } /**
* 比较2集合不同 并返回
* @param set
* @returns {Set}
*/
function difference(set){
var tempSet = new Set();
for(var i=0;i<me.dataStore.length;i++){
if(!set.contains(me.dataStore[i])){
tempSet.add(me.dataStore[i])
}
}
return tempSet;
} /**
* 获取该集合长度
* @returns {Number}
*/
function size(){
return me.dataStore.length;
}
/**
* 显示该集合
* @returns {Array}
*/
function show(){
console.log(me.dataStore)
return me.dataStore;
} /**
* 检查该成员是否属于该集合
* @param data
* @returns {boolean}
*/
function contains(data){
if(me.dataStore.indexOf(data)>-1){
return true;
}else{
return false;
}
}
}

tests

//集合测试
var names = new Set();
names.add("David");
names.add("Jennifer");
names.add("Cynthia");
names.add("Mike");
names.add("Raymond");
//show 测试
names.show();
//remove测试
names.remove("David")
names.show() //union 合并集合 测试
var cis = new Set();
cis.add("Mike");
cis.add("Clayton");
cis.add("Jennifer");
cis.add("Raymond");
var dmp = new Set();
dmp.add("Raymond");
dmp.add("Cynthia");
dmp.add("Jonathan"); var it = cis.union(dmp);
it.show() //交集测试
var inter = cis.intersect(dmp)
inter.show(); //判断是否子集
var it2 = new Set();
it2.add("Cynthia");
it2.add("Clayton");
it2.add("Jennifer");
it2.add("Danny");
it2.add("Jonathan");
it2.add("Terrill");
it2.add("Raymond");
it2.add("Mike");
var dmp2 = new Set();
dmp2.add("Cynthia");
dmp2.add("Raymond");
dmp2.add("Jonathan");
console.log("dmp2 是否是it2 子集:"+dmp2.subset(it2)) //找不同 var d = it2.difference(dmp2)
d.show();

集合的实现 -- 数据结构与算法的javascript描述 第九章的更多相关文章

  1. 检索算法 -- 数据结构与算法的javascript描述 第13章

    检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: / ...

  2. 散列表的实现 -- 数据结构与算法的javascript描述 第八章

    散列表(哈希表 散列是一种常用的数据存储技术,散列后的数据可以快速地插入或取用. 散列表需要一个散列值(key)来存储指定数据,取数据也是依靠此. 散列值可以依靠计算数据的 ASCII码来获得,但是这 ...

  3. 排序算法 -- 数据结构与算法的javascript描述 第12章

    排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * ...

  4. 二叉树的实现 -- 数据结构与算法的javascript描述 第十章

    /** * 树,一种非线性的数据结构. 以分层的方式存储数据. * 一棵树最上面的节点成为根节点,如果一个节点下面有多个节点,这个节点称为父节点,下面的节点称为子节点 * 没有任何子节点的节点,陈宝国 ...

  5. 字典 -- 数据结构与算法的javascript描述 第七章

    字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...

  6. 链表的实现 -- 数据结构与算法的javascript描述 第六章

    链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 ...

  7. 队列的实现 -- 数据结构与算法的javascript描述 第五章

    队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...

  8. 栈的实现 -- 数据结构与算法的javascript描述 第四章

    栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...

  9. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

随机推荐

  1. qt介绍

    http://www.oschina.net/p/qt Qt 是一个跨平台的C++图形用户界面应用程序框架.它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序. ...

  2. poj3673---双重for循环

    #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 15 int main ...

  3. 普林斯顿大学算法课 Algorithm Part I Week 3 排序稳定性 Stability

    稳定性(Stability):先按性质A排序,再按性质B排序,性质B相同的那些项是否仍然是按性质A排序的? 一个稳定的排序,相同值的元素应仍保持相对顺序(relative order) 稳定的算法:插 ...

  4. Struts2 单文件上传

    Struts2 提供了更为简便的文件上传机制,将文件上传的复杂操作都封装到commons-fileupload.jar .commons-io.jar两个jar包中,然后再程序中使用简单的几句代码就能 ...

  5. Data Structure(3)——软考阶段学习小结

    数据结构计算机等级考试中有,自考中有,软考中同样有,可见其内容的重要程度,今天对软考阶段视频学习内容的总结,同样是对前面学习内容的回顾,同样是对后面学习的铺垫. 中结:原本因为之前有过类似的总结,这次 ...

  6. JQuery日记6.9 Promise/A之Callbacks

    JQuery并没有简单的使用一个Array来存储回调函数,而是通过JQuery.Callbacks(options)返回一个self对象,此对象能够动态的add,remove和fire回调函数队列.此 ...

  7. TCP应用编程--套接字C#实现

     套接字之间的连接过程可以分为三个步骤: 1.服务器监听 2.客户端请求 3.连接确认 Ø服务器监听:是指服务器套接字并不定位具体的客户端套接字,而 是处于等待连接的状态,实时监控网络状态. Ø客户端 ...

  8. poj 1149 pigs ---- 最大流

    题意以及分析:http://ycool.com/post/zhhrrm6#rule3 主要是建图,简化图,然后在套最大流的模板. #include <iostream> #include& ...

  9. 后缀数组的一些性质----height数组

    height数组:定义 height[i] = suffix[i-1] 和 suffix[i] 的最长公共前缀,也就是排名相邻的两个后缀的最长公共前缀.那么对于 j 和 k 不妨设 Rank[j] & ...

  10. C++ Primer 读书笔记: 第9章 顺序容器

    第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...