摘要:鏈表存儲有序的元素集合,不同于數組,鏈表中的元素在內存中并不是連續放置,每個元素有一個存取元素本身的節點和一個指向下一個元素的引用組成。優點添加或者移除元素的時候不需要移動其他元素。
鏈表存儲有序的元素集合,不同于數組,鏈表中的元素在內存中并不是連續放置,每個元素有一個存取元素本身的節點和一個指向下一個元素的引用組成。
優點:添加或者移除元素的時候不需要移動其他元素。只需要找到加入的節點,斷開并插入一個元素(修改引用)
function LinkedList() { let Node = function (element) {// 輔助類,包含一個element屬性即具體的值,以及一個next屬性即指向下一個節點的引用 this.element = element; this.next = null; }; let length = 0; let head = null; /** * 向列表尾部添加一個新的項 * @param element */ this.append = function (element) { let node = new Node(element), current; if (head === null) { head = node; } else { current = head; // 循環列表找到最后一項 while (current.next) { current = current.next } // 將最后一項的引用指向新元素(將最后一項的next指向node,建立新連接) current.next = node; } length++;// 更新列表的長度 }; /** * 向列表的特定位置插入一個新的項 * @param position * @param element */ this.insert = function (position, element) { if (position > -1 && position < length) { let node = new Node(element); let current = head, previous, index = 0; if (position === 0) { head = node; node.next = current } else { while (index++ < position) { previous = current; current = current.next } previous.next = node; node.next = current } length++; return true } else { return false } }; /** * 從列表的特定位置移出一項 * @param position */ this.removeAt = function (position) { // 檢查越界值 if (position > -1 && position < length) {// 驗證該位置是否有效 // current是對要移出元素的引用 // previous是對要移出的元素前一個元素的引用 let current = head, index = 0, previous; // 移出第一項 if (position === 0) { head = current.next; } else { while (index++ < position) { previous = current; current = current.next } // 將previous與current的下一項鏈接起來:這樣跳過current,從而實現移出,垃圾收集 previous.next = current.next } length--; return current.element } else { return null } }; /** * 從列表移出一項 * @param element */ this.remove = function (element) { }; /** * 返回元素在列表中的索引 * @param element */ this.indexOf = function (element) { let current = head, index = 0; while(current){ if(element === current.element){// 判定條件需要優化,對于應用類型要判定值相等 return index; } index++; current = current.next } return -1 }; this.isEmpty = function () { }; this.size = function () { }; this.getHead = function () { }; /** * 由于使用Node輔助類,所以要重寫繼承自默認對象的toString方法 */ this.toString = function () { let current = head, string = ""; while (current) { string += current.element + (current.next ? "n" : ""); current = current.next } return string }; this.print = function () { } }
雙向鏈表
循環鏈表
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108866.html
摘要:在字典中,存儲的是鍵,值,集合可以看作值,值的形式存儲元素,字典也稱為映射方法描述備注向字典中添加新元素通過某個鍵值從字典中移除對應的數據值判斷某個鍵值是存在于這個字典中通過鍵值獲取對應的數據值返回字典所有元素的數量刪除字典中所有元素將字典 在字典中,存儲的是[鍵,值],集合可以看作[值,值]的形式存儲元素,字典也稱為映射 方法 描述 備注 set(key,...
摘要:前言本章為重讀學習數據結構與算法的系列文章,該章節主要講述數據結構鏈表,以及實現鏈表的過程和原理。鏈表,是存儲有序的元素集合。鏈表中的元素在內存中并不是連續放置的,每個元素由一個存儲自身的元素節點和一個指向下一個元素的引用指針或鏈接組成。 定場詩 傷情最是晚涼天,憔悴廝人不堪言; 邀酒摧腸三杯醉.尋香驚夢五更寒。 釵頭鳳斜卿有淚,荼蘼花了我無緣; 小樓寂寞新雨月.也難如鉤也難圓。 前言...
摘要:鏈表數據結構與算法第五章鏈表數據結構鏈表不同與數組數組要插入或者移入一個元素的成本很高,因為所有元素都需要移動位置。 JavaScript-鏈表 《Javascript數據結構與算法》第五章 5.1 鏈表數據結構 鏈表不同與數組 數組要插入或者移入一個元素的成本很高,因為所有元素都需要移動位置。 鏈表插入或者移動一個元素時很高效,因為并不需要移動其他的元素位置。 鏈表存儲元素的方式...
摘要:算法第一章學習筆記實現更多內容目標總結本書主要內容,相應算法使用來模仿實現在計算機科學領域,我們用算法這個詞來描述一種有限確定有效的并適合用計算機程序來實現的解決問題的方法。 《算法》第一章學習筆記js實現 更多內容 目標:總結本書主要內容,相應算法使用js來模仿實現 在計算機科學領域,我們用算法這個詞來描述一種有限、確定、有效的并適合用計算機程序來實現的解決問題的方法。我們關注的大多...
摘要:算法第一章學習筆記實現更多內容目標總結本書主要內容,相應算法使用來模仿實現在計算機科學領域,我們用算法這個詞來描述一種有限確定有效的并適合用計算機程序來實現的解決問題的方法。 《算法》第一章學習筆記js實現 更多內容 目標:總結本書主要內容,相應算法使用js來模仿實現 在計算機科學領域,我們用算法這個詞來描述一種有限、確定、有效的并適合用計算機程序來實現的解決問題的方法。我們關注的大多...
閱讀 3513·2021-11-17 17:01
閱讀 3918·2021-11-08 13:12
閱讀 2477·2021-10-08 10:04
閱讀 687·2021-09-29 09:35
閱讀 1418·2021-09-26 10:12
閱讀 2020·2021-09-07 09:58
閱讀 1953·2019-08-30 15:55
閱讀 2134·2019-08-30 13:14