亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專(zhuān)欄INFORMATION COLUMN

【前端數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)】集合

wawor4827 / 2015人閱讀

摘要:前言集合是一種包含不同元素的數(shù)據(jù)結(jié)構(gòu)。二構(gòu)造集合數(shù)據(jù)結(jié)構(gòu)我們將使用實(shí)現(xiàn)集合結(jié)構(gòu),各部分功能使用注釋說(shuō)明。參考資料數(shù)據(jù)結(jié)構(gòu)與算法描述第章集合由于書(shū)上的源代碼出現(xiàn)了錯(cuò)誤,因此代碼根據(jù)實(shí)際運(yùn)行結(jié)果做了相應(yīng)修改。

前言

集合是一種包含不同元素的數(shù)據(jù)結(jié)構(gòu)。集合最重要的兩個(gè)特性是:首先,集合中的成員是無(wú)序的;其次,集合中不允許相同成員存在。

一、關(guān)于集合 集合的定義

我們必須要了解以下關(guān)于集合的定義:

不包含任何成員的集合稱(chēng)為空集,全集則是包含一切可能成員的集合。

如果兩個(gè)集合的成員完全相同,則稱(chēng)兩個(gè)集合相等。

如果一個(gè)集合中所有的成員都屬于另外一個(gè)集合,則前一集合稱(chēng)為后一集合的子集。

集合的操作

對(duì)集合的操作有如下幾種:

并集:將兩個(gè)集合中的成員進(jìn)行合并,得到一個(gè)新集合。

交集:兩個(gè)集合中共同存在的成員組成一個(gè)新的集合。

補(bǔ)集:屬于一個(gè)集合而不屬于另一個(gè)集合的成員組成的集合。

二、構(gòu)造集合數(shù)據(jù)結(jié)構(gòu)

我們將使用JavaScript實(shí)現(xiàn)集合結(jié)構(gòu),各部分功能使用注釋說(shuō)明。
存儲(chǔ)數(shù)據(jù)我們使用的是數(shù)組。

/**
 * Set() 定義集合類(lèi)
 */
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
}

/**
 * add() 該方法用于為集合類(lèi)添加值
 * @param {*} data
 */
function add (data) {
  if (this.contains(data)) {
    return false
  } else {
    this.dataStore.push(data)
    return true
  }
}

/**
 * remove() 該方法用于為集合類(lèi)刪除值
 * @param {*} data
 */
function remove (data) {
  let pos = this.dataStore.indexOf(data)
  if (pos > -1) {
    this.dataStore.splice(pos, 1)
    return true
  } else {
    return false
  }
}

/**
 * show() 該方法用于顯示集合中的所有元素
 */
function show () {
  return this.dataStore
}

/**
 * size() 該方法用于獲取集合的長(zhǎng)度
 */
function size () {
  return this.dataStore.length
}

/**
 * union() 該方法用于求兩個(gè)集合的并集
 * @param {*} set
 */
function union (set) {
  let tempSet = new Set()
  // 將當(dāng)前集合中的元素加入到臨時(shí)集合中
  for (let i = 0; i < this.size(); i++) {
    tempSet.add(this.dataStore[i])
  }
  // 判斷第二個(gè)集合中的元素在臨時(shí)集合中是否存在,若不存在,則加入該元素
  for (let i = 0; i < set.size(); i++) {
    if (!tempSet.contains(set.dataStore[i])) {
      tempSet.add(set.dataStore[i])
    }
  }
  return tempSet
}

/**
 * intersect() 該方法用于求兩集合的交集
 * @param {*} set
 */
function intersect (set) {
  let tempSet = new Set()
  // 遍歷set
  for (let i = 0; i < set.size(); i++) {
    // 當(dāng)該集合中存在此元素,則將該元素插入至tempSet
    if (this.contains(set.dataStore[i])) {
      tempSet.add(set.dataStore[i])
    }
  }
  return tempSet
}

/**
 * subset() 該方法用于判斷當(dāng)前集合是否為set集合的子集
 * @param {*} set
 */
function subset (set) {
  // 當(dāng)該集合的長(zhǎng)度大于set集合的長(zhǎng)度,則該集合不可能為set集合的子集
  if (this.size() > set.size()) {
    return false
  }
  for (let i of this.dataStore) {
    if (!set.contains(i)) {
      return false
    }
  }
  return true
}

/**
 * difference() 該方法用于返回屬于該集合但不屬于set集合的成員
 * @param {*} set
 */
function difference (set) {
  let tempSet = new Set()
  for (let i of this.dataStore) {
    if (!set.contains(i)) {
      tempSet.add(i)
    }
  }
  return tempSet
}

/**
 * contains() 該方法用于判斷元素是否存在于集合中
 * @param {*} data
 */
function contains (data) {
  if (this.dataStore.indexOf(data) > -1) {
    return true
  } else {
    return false
  }
}

以上代碼,個(gè)人認(rèn)為非常重要的方法就是indexOf()來(lái)判斷數(shù)組中是否存在該元素,通過(guò)該方法來(lái)判斷當(dāng)前能否向集合中添加元素。

結(jié)束語(yǔ)

使用JavaScript實(shí)現(xiàn)集合數(shù)據(jù)結(jié)構(gòu)相對(duì)來(lái)說(shuō)比較簡(jiǎn)單。

參考資料:數(shù)據(jù)結(jié)構(gòu)與算法JavaScript描述 第9章 集合 
由于書(shū)上的源代碼出現(xiàn)了錯(cuò)誤,因此代碼根據(jù)實(shí)際運(yùn)行結(jié)果做了相應(yīng)修改。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/95359.html

相關(guān)文章

  • APICloud Github 5大開(kāi)源項(xiàng)目集合展示

    摘要:自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。借此,官方將開(kāi)源項(xiàng)目進(jìn)行分類(lèi)和介紹,使開(kāi)發(fā)者們更好的去了解去使用。更多的開(kāi)源項(xiàng)目均在中。 APICloud自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。不知不覺(jué),2年時(shí)間已過(guò),APICloud的github上已經(jīng)集合了APICloud模塊、前端框架及文檔、云API SDK、開(kāi)發(fā)工具...

    caspar 評(píng)論0 收藏0
  • APICloud Github 5大開(kāi)源項(xiàng)目集合展示

    摘要:自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。借此,官方將開(kāi)源項(xiàng)目進(jìn)行分類(lèi)和介紹,使開(kāi)發(fā)者們更好的去了解去使用。更多的開(kāi)源項(xiàng)目均在中。 APICloud自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。不知不覺(jué),2年時(shí)間已過(guò),APICloud的github上已經(jīng)集合了APICloud模塊、前端框架及文檔、云API SDK、開(kāi)發(fā)工具...

    EscapedDog 評(píng)論0 收藏0
  • APICloud Github 5大開(kāi)源項(xiàng)目集合展示

    摘要:自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。借此,官方將開(kāi)源項(xiàng)目進(jìn)行分類(lèi)和介紹,使開(kāi)發(fā)者們更好的去了解去使用。更多的開(kāi)源項(xiàng)目均在中。 APICloud自成立之初,一直秉承著開(kāi)源一切的初心,為了給予廣大開(kāi)發(fā)者們更多的資源及內(nèi)容。不知不覺(jué),2年時(shí)間已過(guò),APICloud的github上已經(jīng)集合了APICloud模塊、前端框架及文檔、云API SDK、開(kāi)發(fā)工具...

    DDreach 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<