摘要:前言集合是一種包含不同元素的數據結構。二構造集合數據結構我們將使用實現集合結構,各部分功能使用注釋說明。參考資料數據結構與算法描述第章集合由于書上的源代碼出現了錯誤,因此代碼根據實際運行結果做了相應修改。
前言
集合是一種包含不同元素的數據結構。集合最重要的兩個特性是:首先,集合中的成員是無序的;其次,集合中不允許相同成員存在。
一、關于集合 集合的定義我們必須要了解以下關于集合的定義:
不包含任何成員的集合稱為空集,全集則是包含一切可能成員的集合。
如果兩個集合的成員完全相同,則稱兩個集合相等。
如果一個集合中所有的成員都屬于另外一個集合,則前一集合稱為后一集合的子集。
集合的操作對集合的操作有如下幾種:
并集:將兩個集合中的成員進行合并,得到一個新集合。
交集:兩個集合中共同存在的成員組成一個新的集合。
補集:屬于一個集合而不屬于另一個集合的成員組成的集合。
二、構造集合數據結構我們將使用JavaScript實現集合結構,各部分功能使用注釋說明。
存儲數據我們使用的是數組。
/** * Set() 定義集合類 */ 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() 該方法用于為集合類添加值 * @param {*} data */ function add (data) { if (this.contains(data)) { return false } else { this.dataStore.push(data) return true } } /** * remove() 該方法用于為集合類刪除值 * @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() 該方法用于獲取集合的長度 */ function size () { return this.dataStore.length } /** * union() 該方法用于求兩個集合的并集 * @param {*} set */ function union (set) { let tempSet = new Set() // 將當前集合中的元素加入到臨時集合中 for (let i = 0; i < this.size(); i++) { tempSet.add(this.dataStore[i]) } // 判斷第二個集合中的元素在臨時集合中是否存在,若不存在,則加入該元素 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++) { // 當該集合中存在此元素,則將該元素插入至tempSet if (this.contains(set.dataStore[i])) { tempSet.add(set.dataStore[i]) } } return tempSet } /** * subset() 該方法用于判斷當前集合是否為set集合的子集 * @param {*} set */ function subset (set) { // 當該集合的長度大于set集合的長度,則該集合不可能為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 } }
以上代碼,個人認為非常重要的方法就是indexOf()來判斷數組中是否存在該元素,通過該方法來判斷當前能否向集合中添加元素。
結束語使用JavaScript實現集合數據結構相對來說比較簡單。
參考資料:數據結構與算法JavaScript描述 第9章 集合
由于書上的源代碼出現了錯誤,因此代碼根據實際運行結果做了相應修改。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95359.html
摘要:自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。借此,官方將開源項目進行分類和介紹,使開發者們更好的去了解去使用。更多的開源項目均在中。 APICloud自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。不知不覺,2年時間已過,APICloud的github上已經集合了APICloud模塊、前端框架及文檔、云API SDK、開發工具...
摘要:自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。借此,官方將開源項目進行分類和介紹,使開發者們更好的去了解去使用。更多的開源項目均在中。 APICloud自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。不知不覺,2年時間已過,APICloud的github上已經集合了APICloud模塊、前端框架及文檔、云API SDK、開發工具...
摘要:自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。借此,官方將開源項目進行分類和介紹,使開發者們更好的去了解去使用。更多的開源項目均在中。 APICloud自成立之初,一直秉承著開源一切的初心,為了給予廣大開發者們更多的資源及內容。不知不覺,2年時間已過,APICloud的github上已經集合了APICloud模塊、前端框架及文檔、云API SDK、開發工具...
閱讀 511·2023-04-26 00:33
閱讀 3538·2021-11-24 09:39
閱讀 2899·2021-09-22 15:34
閱讀 2316·2019-08-23 18:07
閱讀 2912·2019-08-23 18:04
閱讀 3694·2019-08-23 16:06
閱讀 2893·2019-08-23 15:27
閱讀 1614·2019-08-23 14:32