js数据结构描述--集合

<script type="text/javascript">
    //如何判断一个数组是否存在某一元素
	//var arr = [1,2,3,5];
    //var arr = {a:1,b:2,c:3};

	function Set(data){
		this.constructor = set;
		this.dataStore = Object.prototype.toString.apply(data) == ‘[object Array]‘ ? data : [];
		this.in_array = in_array;
		this.size = size;
		this.add = add;
		this.remove = remove;
		this.show = show;
		this.union = union;
		this.intersect = intersect;	//求两个集合的交集
		this.is_subset = is_subset;	//判断一个集合是否是该集合的子集
		this.diff = diff;
	}

	//判断数组中是否存在某个元素
    function in_array(element){
		var position = this.dataStore.indexOf(element);
		return position < 0 ? false : position;
    }

	function add(element){
		if(!this.in_array(element,this.dataStore)){
			this.dataStore.push(element);
			return true;
		}else{
			return false;
		}
	}

	function remove(element){
		var position = this.in_array(element,this.dataStore);
		if(position){
			this.dataStore.splice(position,1);
			return true;
		}else{
			return false;
		}
	}

	//求两个集合的并集
	function union(data){
		var result = this.dataStore.slice();	//js默认为引用传递
		var temp = new Set(data);
		temp.dataStore = data;

		for(var i=0;i<temp.size();i++){
			if(this.in_array(temp.dataStore[i],this.dataStore) === false){
				result.push(temp.dataStore[i]);
			}
		}
		return result.sort();
	}

	//求两个集合的交集
	function intersect(data){
		var result = [];
		var all = this.union(data);
		var temp = new Set(data);
		for(var i=0;i<all.length;i++){
			if(this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) !== false){
				result.push(all[i]);
			}
		}
		return result;
	}

	//求集合1与集合2的差集
	function diff(data){
		var result = [];			//结果集
		var all = this.union(data);

		var temp = new Set(data);
		temp.dataStore = data;

		for(var i=0;i<all.length;i++){
			if(this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) === false){
				result.push(all[i]);
			}
		}
		return result.sort();
	}

	//求集合的补集
	function  complement(){

	}

	//判断一个集合是否是另一个集合的子集
	function is_subset(data){
		var temp = new Set(data);
		for(var i=0;i<temp.size();i++){
			if(!this.in_array(temp.dataStore[i],this.dataStore)){
				return false;
			}
		}
		return true;
	}

	/*
	function diff(data){
		var result = [];			//结果集
		var all = this.union(data);

		var temp = new Set(data);
		temp.dataStore = data;

		for(var i=0;i<all.length;i++){
			if((this.in_array(all[i],this.dataStore) === false && temp.in_array(all[i],temp.dataStore) !== false) || (this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) === false)){
				result.push(all[i]);
			}
		}
		return result.sort();
	}
	*/

	function size(){
		return this.dataStore.length;
	}

	function show(){
		return this.dataStore;
	}

	var arr1 = [0,1,2,3];
	var arr2 = [1,2,3];
	var set = new Set(arr1);
	//alert(set.size());			//获取集合有几个元素
	//set.remove(5);
	alert(set.is_subset(arr2));
	//alert(set.union(arr2));
	//alert(set.show());
</script>

  

时间: 2024-12-15 10:51:51

js数据结构描述--集合的相关文章

js数据结构描述--列表

<script type="text/javascript"> /** * 数据结构--列表 * [什么是列表] * [列表的使用场景] */ function list(){ this.dataStore = []; this.length = 0; this.postion = 0; this.append = append; this.contains = contains; this.push = push; this.pop = pop; this.remove

js数据结构描述--栈

//栈的实现 function stack(){ this.dataStore = []; this.top = 0; this.pop = pop; this.push = push; this.peek = peek; }

JS中数据结构之集合

集合(set)是一种包含不同元素的数据结构.集合中的元素称为成员.集合的两个最重要特性是:首先,集合中的成员是无序的:其次,集合中不允许相同成员存在.当你想要创建一个数据结构用来保存一些独一无二的元素时就可以用到集合. 基于数组的 Set 类的实现 function Set() { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; this.union = union; //求并集 this.

大数据技术之_16_Scala学习_08_数据结构(下)-集合操作+模式匹配

第十一章 数据结构(下)-集合操作11.1 集合元素的映射-map11.1.1 map 映射函数的操作11.1.2 高阶函数基本使用案例1+案例211.1.3 使用 map 映射函数来解决11.1.4 模拟实现 map 映射函数的机制11.1.5 课堂练习11.2 集合元素的扁平-flatMap11.3 集合元素的过滤-filter11.4 集合元素的化简-reduce11.5 集合元素的折叠-fold11.6 集合元素的扫描-scan11.7 集合的综合应用案例11.8 集合的合并-zip11

JS数据结构第三篇---双向链表和循环链表

一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地址.然后头结点的上一个节点,和尾结点的下一个节点都指向null.同时LinkedList类中再增加一个last内部属性,一直指向链表中最后一个节点.结构模拟如图: 同样对外暴露的方法和单向链表一样,只是内部实现稍有变化 双向链表完整设计代码: /** * 自定义双向链表:对外公开的方法有 * append(e

java 16 - 5 LinkedList模拟栈数据结构的集合

请用LinkedList模拟栈数据结构的集合,并测试 题目的意思是: 你自己的定义一个集合类,在这个集合类内部可以使用LinkedList模拟. 1 package cn_LinkedList; 2 3 import java.util.LinkedList; 4 5 6 7 8 public class MyStack { 9 10 //定义一个LinkedList类的成员变量 11 private LinkedList list = null; 12 13 /** 14 * 构造方法 15

采用LinkedList来模拟栈数据结构的集合--先进后出

三.用LinkedList来模拟栈数据结构的集合 /* * 自定义一个数据结构为LinkedList的集合类*/public class MyCollection_LinkedList { public LinkedList linkedList;            public MyCollection_LinkedList() {             //在构造方法里初始化             linkedList= new LinkedList();             }

C语言、数据结构笔记集合

链表中的“p->next” p->next到底是指p的下一个节点还是p的指针域呢?p是一个指针,那么p->next也应该是一个指针,即p->next应该是一个地址,因此p->next其实是p指向的节点的指针域(next域),所以p->next还是属于当前节点的,只不过它是下一个节点的地址罢了.所以如果函数返回“p->next”,那么函数的类型应为指针函数. 如何让VS2013进行C编程的时候使用基本库函数不会得到警告 把VS项目创建中的安全周期检查关闭就可以任意使

Clojure学习03:数据结构(集合)

Clojure提供了几种强大的数据结构(集合) 一.集合种类 1.vector 相当于数组,如: [2  3   5]  ,  ["ad"  "adas"  "adadsads"] 2.list 相当于链表,如: '(2  3   5)  ,  '("ad"  "adas"  "adadsads") 与vector相比,[]变成了() ,又因为 ()符号是用于函数调用,为了区别,需要在