1. 程式人生 > >JavaScript數據結構與算法-集合練習

JavaScript數據結構與算法-集合練習

ons 最小 算法 pset fun enc pre clas let

集合的實現

function Set () {
    this.dataStore = [];
    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 (data) {
    if (this.dataStore.indexOf(data) < 0) {
        this.dataStore.push(data);
        return true;
    } else {
        return false;
    }
}
function remove (data) {
    let pos = this.dataStore.indexOf(data);
    if (pos > -1) {
        this.dataStore.splice(pos, 1);
        return true;
    } else {
        return false;
    }
}
function show () {
    return this.dataStore;
}
function contains (data) {
    if (this.dataStore.indexOf(data) > -1) {
        return true;
    } else {
        return false;
    }
}
function union (set) {
    let tempSet = new Set();
    for (let i = 0; i < this.dataStore.length; ++i) {
        tempSet.add(this.dataStore[i]);
    }
    for (let i = 0; i < set.dataStore.length; ++i) {
        if (!tempSet.contains(set.dataStore[i])) {
            tempSet.dataStore.push(set.dataStore[i]);
        }
    }
    return tempSet;
}
function intersect (set) {
    let tempSet = new Set();
    for (let i =0; i < this.dataStore.length; ++i) {
        if (set.contains(this.dataStore[i])) {
            tempSet.add(this.dataStore[i]);
        }
    }
    return tempSet;
}
function subset (set) {
    if (this.size() > set.size()) {
        return false;
    } else {
        for (let i = 0; i < this.dataStore.length; ++i) {
            if (!set.contains(this.dataStore[i])) {
                return false;
            }
        }
    }
    return true;
}
function size () {
    return this.dataStore.length;
}
function difference (set) {
    let tempSet = new Set();
    for (let i = 0; i < this.dataStore.length; ++i) {
        if (!set.contains(this.dataStore[i])) {
            tempSet.add(this.dataStore[i]);
        }
    }
    return tempSet;
}

練習

一. 修改集合類,使裏面的元素按順序存儲。寫一段測試代碼來測試你的修改。

// 修改add方法
function add (data) {
    if (this.dataStore.indexOf(data) < 0) {
        this.dataStore.push(data);
        // 排序
        this.dataStore = this.dataStore.sort((a, b) => a - b);
        return true;
    } else {
        return false;
    }
}
// 示例
let s = new Set();
s.add(23);
s.add(3);
s.add(2);
s.add(24);
s.add(73);
console.log(s.show()); // [2, 3, 23, 24, 73]

二. 為集合類增加一個higher(element)方法,該方法返回比傳入元素大的元素中最小的那個。寫一段測試代碼來測試這個方法。

Set.prototype.higher = function (element) {
    let arr = [];
    for (let i = 0; i < this.dataStore.length; ++i) {
        if (this.dataStore[i] > element) {
            arr.push(this.dataStore[i]);
        }
    }
    return arr.sort((a, b) => a - b)[0];
};
// 示例
let s = new Set();
s.add(23);
s.add(3);
s.add(2);
s.add(24);
s.add(73);
console.log(s.higher(20)); // 23
console.log(s.higher(60)); // 73

三. 為集合類增加一個lower(element)方法,該方法返回比傳入元素小的元素中最大的那個。寫一段測試代碼來測試這個方法。

Set.prototype.lower = function (element) {
    let arr = [];
    for (let i = 0; i < this.dataStore.length; ++i) {
        if (this.dataStore[i] < element) {
            arr.push(this.dataStore[i]);
        }
    }
    return arr.sort((a, b) => b - a)[0];
};
// 示例
let s = new Set();
s.add(23);
s.add(3);
s.add(2);
s.add(24);
s.add(73);
console.log(s.lower(20)); // 3
console.log(s.lower(60)); // 24

JavaScript數據結構與算法-集合練習