数据结构与算法-集合

集合是由一组无序且唯一(即不能重复)的项组成的。这个数据结构使用了与有限集合相同 的数学概念,但应用在计算机科学的数据结构中。

  • 结合是一种包含不同元素数据结构
  • 在很多编程语言中并不把集合当成一种数据类型,当你想要创建一个数据结构,用来保存一段独一无二的文字的时候集合就非常有用
  • 集合的成员是无序的
  • 集合中不允许相同成员存在
function Set(){  
  this.dataStore = [];
  this.add = add;
  this.remove = remove;
  this.show = show;
  this.union = union;//并集
  this.intersect = intersect;//交集
  this.difference = difference;//补集
  this.contains = contains;
  this.size = size;
  this.subset = subset;
}
function add(data){  
  if(this.dataStore.indexOf(data) < 0){
    this.dataStore.push(data);
  }else{
    return false;
  }
}
function remove(data){  
  var pos = this.dataStore.indexOf(data);
  if(pos > -1){
    this.dataStore.splice(pos, 1);
  }else{
    return false;
  }
}
function show(){  
  return this.dataStore;
}
function union(set){//全集  
  var tempSet = new Set();
  for(var i=0;i<this.dataStore.length;i++){
    tempSet.add(this.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 contains(data){  
  if(this.dataStore.indexOf(data)>-1) return true;
  else return false;
}
function intersect(set){//交集  
  var tempSet = new Set();
  for(var i=0;i<this.dataStore.length;i++){
    if(set.contains(this.dataStore[i])){
      tempSet.add(this.dataStore[i]);
    }
  }
  return tempSet;
}
function difference(set){//补集  
  var tempSet = new Set();
  for(var i=0;i<this.dataStore.length;i++){
    if(!set.contains(this.dataStore[i])){
      tempSet.add(this.dataStore[i]);
    }
  }
  return tempSet;
}
function size(){  
  return this.dataStore.length;
}
function subset(set){  
  if(set.size()>this.size()){
    return false;
  }else{
    for(var i=0;i<set.dataStore.length;i++){
      if(!this.contains(set.dataStore[i])){
        return false;
      }
    }
    return true;
  }
}

var names = new Set();  
names.add("小红");  
names.add("小丽");  
names.add("小张");  
names.add("Tom");  
names.add("Jack");  
//console.log(names.show());
var cis = new Set();  
cis.add('小张');  
cis.add('Jack');  
cis.add('Tom');  
var it = new Set();  
it = names.union(cis);  
console.log("并集+++++++"+it.show());  
it = names.intersect(cis);  
console.log("交集+++++++"+it.show());  
it = names.difference(cis);  
console.log("补集+++++++"+it.show());  
console.log(names.subset(cis)); 

作者:@lsxlsxxslxsl