数据结构与算法九(js 实现集合类)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>集合类</title>
</head>
<body>
<script>
    function Set(){
        this.item={};
        //添加方法
        Set.prototype.add = function (value) {
            //判断集合中是否有该元素
            if (this.has(value)) return false;

            //将元素添加到对象中
            this.item[value] = value;
            return true;
        }

        Set.prototype.has = function (value) {
            return this.item.hasOwnProperty(value);
        }
        Set.prototype.remove = function (value) {
            if (!this.has(value)) return false;
            //删除元素
            delete  this.item[value];
            return true;
        }
        Set.prototype.clear = function () {
            this.item = {};
            return true;
        }

        Set.prototype.size = function () {
            return Object.keys(this.item).length;
        }

        Set.prototype.values = function () {
            return Object.keys(this.item);
        }

        //集合间的操作
        //并集
        Set.prototype.union = function (otherSet) {
            var  unionSet = new Set();
            var values = this.values();
            for(var i = 0; i < values.length;i++){
                unionSet.add(values[i]);
            }

            //添加B集合
            values = otherSet.values();
            for(var i = 0;i < values.length;i++){
                unionSet.add(values[i]);//因为添加方法里面有进行是否存在当前集合
            }
            return unionSet;
        }
        //交集
        Set.prototype.intersection = function (otherSet) {
            var intersectionSet = new Set();
            var values = otherSet.values();
            for(var i = 0;i < values.length;i++){
                if (this.has(values[i])){
                    intersectionSet.add(values[i]);
                }
            }
            return intersectionSet;
        }
        //差集
        Set.prototype.differenceSet = function (otherSet) {

            var differenceSet = new Set();
            var values = this.values();
            for(var i = 0; i < values.length;i ++){
                if (!otherSet.has(values[i]));
                {
                    differenceSet.add(values[i]);
                }
            }
            return differenceSet;
        }
        //子集
        Set.prototype.subset = function (otherSet) {
            var values = otherSet.values();
            for(var i = 0; i < values.length;i++){
                if (!this.has(values[i])){
                    return false;
                }
            }
            return true;
        }

    }
//
//    var set = new Set();
//    set.add('a');
//    set.add('b');
//    set.add('c');
//    set.add('d');
//    alert(set.add('c'));
//    alert(set.values());
//    alert(set.remove('c'));
//    alert(set.remove('c'));
//    alert(set.values());
//    alert(set.clear());
//    alert(set.values());


    var set = new Set();
    set.add('a');
    set.add('b');
    set.add('c');
    var otherSet = new Set();

    otherSet.add('1');
    otherSet.add('2');
    otherSet.add('3');
    otherSet.add('a');
//    var union = set.union(otherSet);
//    alert(union.values());
//    alert(set.intersection(otherSet).values());
//    alert(set.differenceSet(otherSet).values());
    var subS = new Set();
    subS.add('a');
    subS.add('b');
    alert(set.subset(subS));
    alert(otherSet.subset(subS));

</script>


</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值