数据结构与算法javascript描述(六)集合

本文介绍集合的基本概念,包括空集、全集、相等、子集等,并详细讲解了并集、交集、补集等集合操作。同时,提供了一个简单的 Set 类实现,包括添加、删除、显示集合元素及执行各种集合运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合(Set)是一种包含不同元素的数据结构。集合中的元素称为成员。集合的两个最重要的特性是:首先,集合中的成员是无序的;其次,集合中不允许相同成员存在。当你想要创建一个数据结构,用来保存一些独一无二的元素时,比如一段文本中用到的单词,集合就变的非常有用。

集合的定义:

(1)不包含任何成员的集合称为空集,全集则是包含一切可能成员的集合。

(2)如果两个集合的成员完全相同,则称两个集合相等。

(3)如果一个集合中所有的成员都属于另外一个集合,则前一集合称为后一集合的子集。

对集合的操作:

(1)并集

         将两个集合中的成员进行合并,得到一个新集合。

  (2)交集

       两个集合中共同存在的成员组成一个新的集合。

    (3)补集

       属于一个集合而不属于另一个集合的成员组成的集合。

Set类定义:

  

<span style="white-space:pre">			</span>function Set() {
				this.dataSource = [];
				this.add = add;
				this.remove = remove;
				this.size = size;
				//并集
				this.union = union;
				//交集
				this.intersect = intersect;
				//子集
				this.subset = subset;
				//this.difference = difference;
				this.show = show;
				this.contains = contains;
			}
			function add(elem) {
				if(this.dataSource.indexOf(elem)>-1) {
					return false;
				}else {
					this.dataSource.push(elem);
					return true;
				}
			}
			function remove(data) {
				var pos = this.dataSource.indexOf(data);
				if(pos>-1) {
					this.dataSource.splice(pos, 1);
					return true;
				}else {
					return false;
				}
			}
			function size() {
				return this.dataSource.length;
			}
			function show() {
				var i=0,
					len = this.dataSource.length;
				while(i < len) {
					console.log(this.dataSource[i]);
					i++;
				}
			}
			function contains(data) {
				if(this.dataSource.indexOf(data) > -1){
					return true;
				}else {
					return false;
				}
			}
			function union(set) {
				var temp = new Set(),
					i = 0,len = 0;
				for(i=0,len = this.dataSource.length;i<len; i++) {
					temp.add(this.dataSource[i]);
				}
				for(i=0,len = set.dataSource.length;i<len;i++) {
					if(!temp.contains(set.dataSource[i])) {
						temp.dataSource.push(set.dataSource[i]);
					}
				}
				return temp;

			}
			function intersect(set) {
				var i = 0,len = set.dataSource.length,
					tempSet = new Set();
				while(i < len) {
					if(this.contains(set.dataSource[i])) {
						tempSet.add(set.dataSource[i]);
					}
					i++;
				}
				return tempSet;
			}
			function subset(set) {
				if(this.size() > set.size()) {
					return false;
				}
				var i,len;
				for(i = 0,len = this.size();i<len;i++) {
					if(!set.contains(this.dataSource[i])) {
						return false;
					}
				}
				return true;
			}
			function difference(set) {
				var temSet = new Set(),
					i,len;
				for(i=0,len = this.size();i<len;i++) {
					if(!set.contains(this.dataSource[i])) {
						tempSet.add(this.dataSource[i]);
					}
				}
				return tempSet;
			}

			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 = new Set();
			it = cis.intersect(dmp);
			//it.show();
			console.log(cis.subset(dmp));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值