書籍推薦
有幸拜讀《數據結構與算法Javascript描述》這本書,先強烈安利一波!非常感謝作者大大給我們前端領域帶來這本書。
全書從javascript的角度出發,簡單明了的分析了數據結構在javascript領域的實現過程與實際的應用案例,且在每一章的結尾,都給大家留了一些書中案例相關的小作業,讓大家可以實操消化,是一本實實在在可以帶領大家入門數據結構與算法的神書,再次強烈推薦!!!
那么,如何使用javascript實現一個列表呢?作為一名前端開發人員,大家的第一反應肯定都是利用數組,但我們可以利用數組做些什么呢?這時候就需要大家對List這種數據結構有一定的了解了。
嘗試理解List
- 我們可以把List看成一個對象(比如一列火車)
- 這個對象有自己的屬性和方法(火車有車廂長度,每節車廂的位置,可以前進,可以后退,車廂排列一定是有序的,車廂是一節一節連接,可以給火車在后面添加一節車廂…)
- 我們如何去獲取或修改對象內部的一些零件或者獲取對象的一些信息?(通過屬性和方法)
代碼實現
function List () {// 列表數據this.data = []// 列表的元素個數this.listSize = 0// 列表的當前位置this.pos = 0// 返回列表元素的個數this.length = function() {return this.listSize}// 清空列表中的所有元素this.clear = function() {this.data.length = 0this.listSize = this.pos = 0}// 返回列表的字符串形式this.toString = function() {return this.data}// 返回當前位置的元素this.getElement = function() {return this.data[this.pos]}/*** 在現有元素后插入新元素* @param elem 需要插入的元素* @param after 將elem插入到after元素的后面*/this.insert = function(elem, after) {const insertIndex = this.findIndex(after)if (insertIndex === -1) {console.error(`未查找需要插入的元素位置`)return false}this.data.splice(insertIndex + 1, 0, elem)++this.listSizereturn true}// 在列表的末尾添加新元素this.append = function(elem) {this.data[this.listSize++] = elem}// 從列表中刪除元素this.remove = function(elem) {const index = this.findIndex(elem)if (index === -1) {console.error(`未查找到需要刪除的元素,目前列表包含的具體元素為:${this.toString()}`)return false}this.data.splice(index, 1)--this.listSizereturn true}// 將列表的當前位置移動到第一個元素this.front = function() {this.pos = 0}// 將列表的當前位置移動到最后一個元素this.end = function() {this.pos = this.listSize - 1}// 將當前位置后移一位this.prev = function() {if (this.pos > 0) {--this.posreturn true}console.error('列表已經不能后移了')return false}// 將當前位置前移一位this.next = function() {if (this.pos < this.listSize - 1) {++this.posreturn true}console.error('列表已經不能前移了')return false}// 返回列表的當前位置this.currPos = function() {return this.pos}// 將當前位置移動到指定位置this.moveTo = function(position) {this.pos = position}// 查找元素在列表中的位置索引this.findIndex = function(elem) {for (let i = 0; i < this.listSize; i ++) {if (this.data[i] === elem) return i}return -1}// 判斷元素是否在列表中this.contains = function (elem) {const index = this.findIndex(elem)if (index > -1) {return true}return false}
}
測試一下
const names = new List();
names.append("Clayton");
names.append("Raymond");
names.append("Cynthia");
names.append("Jennifer");
names.append("Bryan");
names.append("Danny");
names.front();
console.log(names.getElement());
names.next();
console.log(names.getElement());
names.next();
names.next();
names.prev();
console.log(names.getElement());
結果
以上就是本文的全部內容,希望大家能從文章中感受到數據結構的魅力,想要了解更多更詳細的實際應用常見,請一定要去看一下 《數據結構與算法Javascript描述》這本書!