集合:唯一性,无序性;

基本结构:

  1. function Set () {
  2. this.dataStore = [];
  3. this.add = add;
  4. this.remove = remove;
  5. this.contains =contains;
  6. this.show = show;
  7. }
  8. function contains(data) {
  9. var pos = this.dataStore.indexOf(data);
  10. if(pos > -1) {
  11. return true;
  12. } else {
  13. return false;
  14. }
  15. }
  16. function add(data) {
  17. var pos = this.dataStore.indexOf(data);
  18. if( pos < 0) {
  19. this.dataStore.push(data);
  20. return true;
  21. } else {
  22. return false;
  23. }
  24. }
  25. function remove(data) {
  26. var pos = this.dataStore.indexOf(data);
  27. if(pos > -1) {
  28. this.dataStore.splice(pos,1);
  29. return true;
  30. } else {
  31. return false;
  32. }
  33. }
  34. function show() {
  35. console.log(this.dataStore);
  36. }

操作:demo

集合的基本操作:并集,交集,补集;

并集:

  1. 新增:
  2. function union(set) {
  3. var tempSet = new Set();
  4. for(var i = 0; i < this.dataStore.length; ++i) {
  5. tempSet.add(this.dataStore[i]);
  6. }
  7. for(var i = 0; i < set.dataStore.length; ++i) {
  8. var setData = set.dataStore[i];
  9. if(!tempSet.contains(setData)) {
  10. tempSet.dataStore.push(setData);
  11. }
  12. }
  13. return tempSet;
  14. }

操作: demo;

交集:

  1. 新增:
  2. function intersect(set) {
  3. var tempSet = new Set();
  4. for(var i = 0; i < this.dataStore.length; ++i) {
  5. var thisData = this.dataStore[i];
  6. if(set.contains(thisData)) {
  7. tempSet.add(thisData);
  8. }
  9. }
  10. return tempSet;
  11. }

操作: demo;

 补集:

  1. 新增:
  2.  
  3. function difference(set) {
  4. var tempSet = new Set();
  5. for(var i = 0; i < this.dataStore.length; ++i) {
  6. var thisData = this.dataStore[i];
  7. if(!set.contains(thisData)) {
  8. tempSet.add(thisData);
  9. }
  10. }
  11. return tempSet;
  12. }

父集判断:

  1. 新增:
  2. function size() {
  3. return this.dataStore.length;
  4. }
  5. function subset(set) {
  6. if(this.size() > set.size()) {
  7. return false;
  8. } else {
  9. for(var i = 0; i < this.dataStore.length; ++i) {
  10. var thisData = this.dataStore[i];
  11. if(!set.contains(thisData)) {
  12. return false;
  13. }
  14. }
  15. }
  16. return true;
  17. }

 操作:demo

js:数据结构笔记8--集合的更多相关文章

  1. js数据结构与算法——集合

    <script> function Set(){ var items = {};//使用对象表示集合,因为js对象不允许一个键指向两个不同的值,保证集合里面的匀速唯一性 this.add ...

  2. js:数据结构笔记12--排序算法(2)

    高级排序算法:(处理大数据:百万以上) 希尔排序:是插入排序的优化版: 首先设置间隔数组,然后按照每个间隔,分别进行排序: 如第一个间隔为5,首先a[5]与a[0]进行插入排序;然后a[6]和a[0] ...

  3. js:数据结构笔记10--图和图算法

    图:是由边和定点的集合组成:  按照图的定点对是否有序可以分为:有向图和无向图:  路径:所有顶点都由边连接构成:路径长度为第一个定点到最后一个顶点之间的数量:  环:指向自身的顶点,长度为0:圈:至 ...

  4. js:数据结构笔记5--链表

    数组: 其他语言的数组缺陷:添加/删除数组麻烦: js数组的缺点:被实现为对象,效率低: 如果要实现随机访问,数组还是更好的选择: 链表: 结构图: 基本代码: function Node (elem ...

  5. js:数据结构笔记4--队列

    队列是一种特殊的列表,数据结构为FIFO: 定义: function Queue() { this.dataStore = []; this.enqueue = enqueue; this.deque ...

  6. js:数据结构笔记3--栈

    栈是一种特殊的列表,数据结构为LIFO: 定义: function Stack() { this.dataStore = []; this.top = 0; this.push = push; thi ...

  7. js:数据结构笔记1---数组

    JS中数组: 只是一种特殊的对象,比其他语言中效率低: 属性是用来表示偏移量的索引:在JS中,数字索引在内部被转化为字符串类型(这也是为什么写对象属性的时候可以不叫引号),因为对象中的属性必须是字符串 ...

  8. js:数据结构笔记14--高级算法

    动态规划: 递归是从顶部开始将问题分解,通过解决所有分解出小问题来解决整体问题: 动态规划从底部开始解决问题,将所有小问题解决,然后合并掉一个整体解决方案: function dynFib(n) { ...

  9. js:数据结构笔记13--检索算法

    顺序查找:也称线性查找,暴力查找的一种 基本格式: var nums = []; for(var i = 0; i < 10; ++i) { nums[i] = Math.floor(Math. ...

随机推荐

  1. sql重复记录查询

    1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (select  peopleId  fro ...

  2. 图论&数据结构——并查集

    Wikioi 4246 NOIP模拟赛Day2T1 奶牛的身高  题目描述 Description 奶牛们在FJ的养育下茁壮成长.这天,FJ给了奶牛Bessie一个任务,去看看每个奶牛场中若干只奶牛的 ...

  3. Entity Framework 系统约定配置

    前言 Code First之所以能够让开发人员以一种更加高效.灵活的方式进行数据操作有一个重要的原因在于它的约定配置.现在软件开发越来越复杂,大家都试图将软件设计的越来越灵活,很多内容我们都希望是可配 ...

  4. Spring各个jar包的简介

    spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...

  5. js获取中国日期-农历

    /* var bsYear; var bsDate; var bsWeek; var arrLen=8; //数组长度 var sValue=0; //当年的秒数 var dayiy=0; //当年第 ...

  6. Difference between git pull and git pull --rebase

    个人博客地址:  http://www.iwangzheng.com/ 推荐一本非常好的书 :<Pro Git>  http://iissnan.com/progit/ 构造干净的 Git ...

  7. KMP算法精髓

    这个算法的做法就是在部分匹配的时候,常规想法是向后移动一位,但是KMP想法是向后移动n位(n=m-L). 注释:这里m表示已经匹配了的字符的个数,L表示已经匹配了的那些字符组成的这个字符串的前缀和后缀 ...

  8. function foo(){}、(function(){})、(function(){}())等函数区别分析

    前面一段时间,看到(function(){}),(function(){}())这些函数就犯晕,不知道它到底是什么意思,为什么函数外要加小括号,函数后要加小括号,加和不加到底有什么区别……一直犯迷糊, ...

  9. SQL注入--宽字节注入

    PHP测试代码: <?php // 面向对象写法 $id=addslashes($_GET[‘id’]); //获取id并转义预定义字符 // /$id=$_GET[‘id’]; $mysqli ...

  10. DCMTK开源库的学习笔记4:利用ini配置文件对dcm影像进行归档

    转:http://blog.csdn.net/zssureqh/article/details/8846337 背景介绍: 医学影像PACS工作站的服务端需要对大量的dcm文件进行归档,写入数据库处理 ...