JavaScript數(shù)據(jù)結(jié)構(gòu)與算法-集合練習(xí)

集合的實(shí)現(xiàn)

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;
}

練習(xí)

一. 修改集合類,使里面的元素按順序存儲(chǔ)。寫一段測(cè)試代碼來測(cè)試你的修改。

// 修改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]

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

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

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

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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末窿祥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蝙寨,更是在濱河造成了極大的恐慌晒衩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,865評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件墙歪,死亡現(xiàn)場(chǎng)離奇詭異听系,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)虹菲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門靠胜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人毕源,你說我怎么就攤上這事浪漠。” “怎么了霎褐?”我有些...
    開封第一講書人閱讀 169,631評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵址愿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我冻璃,道長(zhǎng)响谓,這世上最難降的妖魔是什么损合? 我笑而不...
    開封第一講書人閱讀 60,199評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮娘纷,結(jié)果婚禮上塌忽,老公的妹妹穿的比我還像新娘。我一直安慰自己失驶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,196評(píng)論 6 398
  • 文/花漫 我一把揭開白布枣购。 她就那樣靜靜地躺著嬉探,像睡著了一般。 火紅的嫁衣襯著肌膚如雪棉圈。 梳的紋絲不亂的頭發(fā)上涩堤,一...
    開封第一講書人閱讀 52,793評(píng)論 1 314
  • 那天,我揣著相機(jī)與錄音分瘾,去河邊找鬼胎围。 笑死,一個(gè)胖子當(dāng)著我的面吹牛德召,可吹牛的內(nèi)容都是我干的白魂。 我是一名探鬼主播,決...
    沈念sama閱讀 41,221評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼上岗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼福荸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起肴掷,我...
    開封第一講書人閱讀 40,174評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤敬锐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呆瞻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體台夺,經(jīng)...
    沈念sama閱讀 46,699評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,770評(píng)論 3 343
  • 正文 我和宋清朗相戀三年痴脾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了颤介。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,918評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡明郭,死狀恐怖买窟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薯定,我是刑警寧澤始绍,帶...
    沈念sama閱讀 36,573評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站话侄,受9級(jí)特大地震影響亏推,放射性物質(zhì)發(fā)生泄漏学赛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,255評(píng)論 3 336
  • 文/蒙蒙 一吞杭、第九天 我趴在偏房一處隱蔽的房頂上張望盏浇。 院中可真熱鬧,春花似錦芽狗、人聲如沸绢掰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽滴劲。三九已至,卻和暖如春顾复,著一層夾襖步出監(jiān)牢的瞬間班挖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評(píng)論 1 274
  • 我被黑心中介騙來泰國打工芯砸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萧芙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,364評(píng)論 3 379
  • 正文 我出身青樓假丧,卻偏偏與公主長(zhǎng)得像双揪,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子虎谢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,926評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容