百度百科解釋:
以表格爲容器,裝載着文字或圖表的一種形式,叫列表。
<數據結構術語>數據結構中的列表通常指線性列表的簡稱
列表是一種數據項構成的有限序列,即按照必定的線性順序,排列而成的數據項的集合,在這種數據結構上進行的基本操做包括對元素的的查找,插入,和刪除javascript
平常生活中人們使用的列表:行程安排列表、待辦事項列表、榜單列表等。java
javascript中沒有原生定義的列表,但咱們能夠根據列表思想,建立列表類,抽象列表的數據類型,實現列表功能。數組
定義 | 說明 |
---|---|
listSize(屬性) | 列表的元素個數 |
pos(屬性) | 列表的當前位置 |
dataStore(屬性) | 空數組保存列表元素 |
append(方法) | 在列表的末尾添加新元素 |
find(方法) | 在列表中查找某一個元素 |
remove(方法) | 從列表中刪除元素 |
length(方法) | 返回列表中有多少元素 |
toString(方法) | 返回列表中的字符串形式 |
insert(方法) | 在現有元素後插入新元素 |
clear(方法) | 清空列表中的全部元素 |
contains(方法) | 判斷給定值是否在列表中 |
getElement(方法) | 返回當前位置的元素 |
front(方法) | 將列表的當前位置移動到第一個元素 |
end(方法) | 將列表的當前位置移動到最後一個元素 |
prev(方法) | 將當前位置後移一位 |
next(方法) | 將當前位置前移一位 |
hasNext(方法) | 判斷後一位 |
hasPrev(方法) | 判斷前一位 |
currPos(方法) | 返回列表的當前位置 |
moveTo(方法) | 將當前位置移動到指定位置 |
function List() {
this.listSize = 0
this.pos = 0 // 當前位置
this.dataStore = [] // 初始化一個空數組來保存列表元素
}
List.prototype = {
constructor: List,
append: function () {},
find: function () {},
remove: function () {},
length: function () {},
toString: function () {},
insert: function () {},
clear: function () {},
contains: function () {},
front: function () {},
end: function () {},
prev: function () {},
next: function () {},
currPos: function () {},
moveTo: function () {},
getElement: function () {},
hasNext: function () {},
hasPrev: function () {}
}
複製代碼
append: function (element) {
this.dataStore[this.listSize] = element
this.listSize++
}
// 給列表的下一個位置增長一個新的元素,該位置正好等於listSize的值,添加好元素後,listSize加1
複製代碼
find: function (element) {
for (var i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
retrun i
}
}
return -1
}
// 在列表中查找某一元素,若是找到返回該位置,不然返回-1
複製代碼
remove: function (element) {
var foundAt = thsi.find(element)
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1)
this.listSize--
return true
}
return false
}
/* remove()方法是cList類中較難實現的一個方法, 首先,須要在列表中找到該元素, 而後刪除,而且調整底層的數組對象以填補刪除該元素後留下的空白。 可是,在js中可使用splice()方法來簡化這一過程 */
複製代碼
length: function () {
return this.listSize
}
// 返回列表元素個數
複製代碼
toString: function () {
return this.dataStore
}
// 返回元素數組
複製代碼
insert: function (element, after) {
var insertPos = this.find(after)
if (insertPos > -1) {
this.dataStore.splice(insertPos + 1, element)
this.listSize++
return true
}
return false
}
// 找到傳入的after參數在列表中的位置,使用splice()將新元素插入該位置以後,而後長度+1並返回true
複製代碼
clear: function () {
delete this.dataStore
this.dataStore.length = 0
this.listSize = this.pos = 0
}
// 置空
複製代碼
contains: function (element) {
for (var i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return true
}
}
return false
}
// 循環判斷給定值是否在列表中
複製代碼
// 使用迭代器訪問列表
front: function () {
this.pos = 0
}
end: function () {
this.pos = this.listSize - 1
}
prev: function () {
this.pos--
}
next: function () {
if (this.pos < this.listSize) {
this.pos++
}
}
currPos: function () {
return this.pos
}
moveTo: function (positon) {
this.pos = position
}
getElement: function () {
return this.dataStore[this.pos]
}
hasNext: function () {
return this.pos < this.listSize
}
hasPrev: function () {
return this.pos >= 0
}
// 使用迭代器,能夠沒必要關心數據的內部存儲方式,以實現對列表的遍歷。
// 相似指針,在列表上隨意移動(嚴格意義上不是指針)
複製代碼
// 迭代器遍歷列表的例子
for (names.front(); names.hasNext(); names.next()) {
console.log(names.getElement())
}
// 在for循環的一開始,將列表的當前位置設置爲第一個元素,只要currPos的值小於列表的長度,就一直循環,每一次循環都調用next()將當前位置移動一位
複製代碼
function List() {
this.listSize = 0
this.pos = 0 // 當前位置
this.dataStore = [] // 初始化一個空數組來保存列表元素
}
List.prototype = {
constructor: List,
append: function (element) {
this.dataStore[this.listSize] = element
this.listSize++
},
find: function (element) {
for (var i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return i
}
}
return -1
},
remove: function (element) {
var foundAt = thsi.find(element)
if (foundAt > -1) {
this.dataStore.splice(foundAt, 1)
this.listSize--
return true
}
return false
},
length: function () {
return this.listSize
},
toString: function () {
return this.dataStore
},
insert: function (element, after) {
var insertPos = this.find(after)
if (insertPos > -1) {
this.dataStore.splice(insertPos + 1, element)
this.listSize++
return true
}
return false
},
clear: function () {
delete this.dataStore
this.dataStore.length = 0
this.listSize = this.pos = 0
},
contains: function (element) {
for (var i = 0; i < this.dataStore.length; i++) {
if (this.dataStore[i] === element) {
return true
}
}
return false
},
front: function () {
this.pos = 0
},
end: function () {
this.pos = this.listSize - 1
},
prev: function () {
this.pos--
},
next: function () {
if (this.pos < this.listSize) {
this.pos++
}
},
currPos: function () {
return this.pos
},
moveTo: function (positon) {
this.pos = position
},
getElement: function () {
return this.dataStore[this.pos]
},
hasNext: function () {
return this.pos < this.listSize
},
hasPrev: function () {
return this.pos >= 0
}
}
var movies = ['電影1', '電影2', '電影3', '電影4', '電影5', '電影6', '電影7', '電影8', '電影9', '電影10']
var movieList = new List() // 根據前面寫的List類new出列表對象
// 列表中添加對應內容
for (var i = 0; i < movies.length; i++) {
movieList.append(movies[i])
}
// 顯示列表內容
function displayList() {
for (movieList.front(); movieList.hasNext(); movieList.next()) {
console.log(movieList.getElement())
}
}
displayList()
// 更多用法請觸類旁通。
複製代碼