集合的实现 -- 数据结构与算法的javascript描述 第九章
2014-10-10 09:32
423 查看
集合
集合(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描述 第四章
- 队列的实现 -- 数据结构与算法的javascript描述 第五章
- 二叉树的实现 -- 数据结构与算法的javascript描述 第十章
- 链表的实现 -- 数据结构与算法的javascript描述 第六章
- 散列表的实现 -- 数据结构与算法的javascript描述 第八章
- javascript实现数据结构与算法系列:循环链表与双向链表
- javascript实现数据结构与算法系列:功能完整的线性链表
- javascript数组的扩展实现代码集合
- Javascript实现的Map集合工具类完整实例
- 字典 -- 数据结构与算法的javascript描述 第七章
- javascript数组的扩展实现代码集合
- 集合的概念、类型、接口以及接口的实现类的方法描述
- javascript 实现hashtable集合
- 数据结构与算法(javascript描述)——2. 数组
- JavaScript实现通过的集合类
- 数据结构与算法-树2-二叉树(javascript描述)
- javascript dom 学习笔记 第九章:实现给某个元素添加加新的class的值的函数!
- javascript实现数据结构与算法系列
- javascript实现数据结构与算法系列:栈 -- 顺序存储表示和链式表示及示例
- javascript实现数据结构与算法系列:队列 -- 链队列和循环队列实现及示例