JS中的算法与数据结构之集合(套)实例详解

  

本文实例讲述了JS中的算法与数据结构之集合(组)。分享给大家供大家参考,具体如下:
  

  

集合(套)

  

同数学中所学的一样,集合(套)是由一组无序但彼此之间又有一定关系性的成员构成,每个成员在集合中只能出现一次,不同于我们之前说的字典,链表之类的,它是一种包含了不同元素的数据结构(集合中的元素称为成员),从其定义中我们可以看出它具有两个很重要的特征:首先,集合中的成员是无序的,其次,集合中的成员是不相同的,即集合中不存在相同的成员。

  

实际上,很多编程语言中,集合并不是一种数据类型,但是如果你需要创建一个数据结构用来保存一些独一无二的元素时,集合就变得很有用了,接下来我们一起来看看JS中如何实现一个集合。

  

集合的定义

  

我们要实现一个集合,首先要对其一些定义做了解

  
      <李>不包含任何成员的集合称为<强>空集强,包含一切可能成员的集合称为<强>全集   <李>如果两个集合里的成员都完全相同,则称两个集合相等。   <李>如果一个集合所有成员都包含于另一个集合,则前一集合称为后一集合的一个<强>子集   
  

集合的操作

  

通常来说,集合的基本操作有以下三种:

  
      <李>并集:将两个集合中的成员进行合并,得到一个新的集合李   <李>交集:将两个集合中共同存在的成员组成的一个新的集合李   <李>补集:属于一个集合而不属于另一个集合的成员组成的新的集合李   
  

集合的实现

  

集合(套)的实现我们这里基于数组,用数组来存储数据,根据我们之前学习的以及上面提到的一些方法,我们可以将集合的构造函数定义如下(为了区别ES6的集合类型,我们这里选择用MySet命名):

     //构造函数      函数MySet () {   这一点。数据存储=[];//数据存储   这一点。添加=添加;//添加成员   这一点。删除=删除;//删除成员   这一点。大?大小;//集合元素个数   这一点。联盟=联盟;//集合求并集   this.intersect=相交;//集合求交集   这一点。子集=子集;//判断一个集合是否是另一集合的子集   这一点。差异=差异;//集合求补集   这一点。包含=包含;//判断某成员是否属于该集合   这一点。显示=显示;//显示当前集合   }   之前      
 
  

我们第一个要实现的方法就是向集合中添加一个成员,即添加方法

  

<强>添加:向集合中添加一个成员

     //添加元素      函数添加(数据){//判断元素是否存在集合当中   如果(this.dataStore。indexOf(数据)& lt;0){   this.dataStore.push(数据);   返回true;   其他}{   控制台。警告(“不能添加”+数据+ ',必须已经在组');   返回错误;   }   }   之前      
 
  

我们之前提到,集合中的元素是独一无二的,因此,我们在将数据存储到数组之前,首先就是要确保该集合不存在该数据,因此,我们先用indexOf方法检查新加入的元素是否存在,如果找到了就返回该成员在数组中的位置,否则,就返回1,那么对应的增加方法就可以定义返回布尔值,添加成功我们返回真,否则返回假,这样就可以明确告诉我们是否正确的插入了一个元素。

  

<强>删除:删除集合中某个成员

     //删除元素      函数删除(数据){//判断元素是否存在集合当中   var pos=this.dataStore.indexOf(数据);   如果(pos比;1){   this.dataStore.splice (pos, 1);   返回true;   其他}{   控制台。警告(数据+不设置);   返回错误;   }   }   之前      
 
  

这里,我们顺理成章的实现了删除方法,它跟添加方法很类似,首先要检查待删除元素是否存在于数组中,如果存在,我们调用数组的接头()方法删除该元素并返回真,否则,直接返回假,表示集合中不存在该元素。

  

现在,我们可以完成集合的添加和删除,要测试这些方法之前,我们首先得定义显示方法,该方法用来显示集合中的成员,该方法的实现很简答,只需返回我们定义的数组即可:

  

<强>显示:显示集合中的成员

     //显示集合成员      函数显示(){   console.log (this.dataStore);   返回this.dataStore;   }   

JS中的算法与数据结构之集合(套)实例详解