摘要:概述這篇文章是說鏈表,鏈表這種數據結構非常普遍,有時候我們根本就沒有意識到用的是鏈表啥是鏈表鏈表就是用繩子連起來的酒瓶子,酒就是數據,每個酒瓶子都連著下一個酒瓶子。
0x000 概述
這篇文章是說鏈表,鏈表這種數據結構非常普遍,有時候我們根本就沒有意識到用的是鏈表
0x001 啥是鏈表鏈表就是用繩子連起來的酒瓶子,酒就是數據,每個酒瓶子都連著下一個酒瓶子。
鏈表一共有兩個操作
插入:將一個新的節點插入鏈表
刪除:將一個節點從鏈表中刪除
0x001 初始化鏈表不像數組、隊列、棧一樣需要容器,鏈表是通過一個數據引用另一個數據連接起來的,所以鏈表的初始化就是初始化第一個鏈表節點,這個鏈表作為特殊的開始節點,不作為數據。
function init() { return { data: "start", next: null } }0x002 插入節點
插入節點有兩種情況
直接插到最后面:直接將最后一個節點的next指向新的節點
插到指定節點后面:找到這個節點,將新節點的next指向這個節點的next,并將這個節點的next指向新節點
function insert(node, newNode, data) { while (node) { if (data && node.data === data) { if (node.next) { newNode.next = node.next } node.next = newNode return } if (!data && node.next === null) { node.next = newNode return } node = node.next } }0x003 刪除節點
刪除節點只需要斷開next指向就行了
function delete_(node, data) { let parent = node node = node.next while (node) { if (node.data === data) { if (parent) { parent.next = node.next return } else { return } } parent = node node = node.next } throw `not found node by data: ${data}` }0x004 使用
let node = init() // {"data":"start","next":null} insert(node, {data: 2, next: null}) // {"data":"start","next":{"data":2,"next":null}} insert(node, {data: 3, next: null}) // {"data":"start","next":{"data":2,"next":{"data":3,"next":null}}} insert(node, {data: 4, next: null}, 2) // {"data":"start","next":{"data":2,"next":{"data":4,"next":{data: 3, next: null}}}} delete_(node, 2) // {"data":"start","next"{"data":4,"next":{data: 3, next: null}}}0x005 栗子:表單進度
這個栗子使用其他數據結構也可以實現,這里特意使用鏈表來實現就是為了演示而已
效果
視圖
源碼
0x006 雙向鏈表
在上面的視線中,使用next指向下一個節點,從方向上說,我們可以從父節點訪問子節點,但是無法從子節點訪問父節點,或者說,我只能從一個方向有序訪問鏈表。在這基礎上衍生出雙向鏈表,雙向鏈表就是在單向鏈表的基礎上添加對上一個節點的引用
示意圖
節點
{ "data":"", "prev":null, "next":null }
插入
newNdoe.prev=node.prev // 將新節點的 prev 指向當前節點的 prev newNode.next=node // 將新節點的 next 點指向當前節點 node.prev.next=newNode // 將新節點的 prev 的 next 指向新節點
刪除
node.prev.next=node.next // 將當前節點的 prev 的 next 指向當前節點的 next node.prev=null // 將當前節點的 prev 斷開 node.next.prev=node.prev// 將當前節點的 next 的 prev 指向當前節點的 prev node.next=null // 將當前節點的 next 斷開0x007 環形鏈表
環形鏈表就是將收尾的節點也鏈接起來,如果是單項鏈表首尾連接,那就是單項環形鏈表,如果是雙向鏈表首尾連接,那就是雙向循環鏈表。代碼沒有太大的差別,就是在最后一個節點next指向第一個,第一個節點的prev指向最后一個,形成一個環裝
圖示
0x008 資源源代碼:[https://github.com/followWint...]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99001.html
摘要:概述在中,渲染數據的形式有多種多樣,但是萬變不離其中,都是用。當然,自由也帶來混亂,需要將這種自由化為思想的自由,而不是工程的自由代碼的自由,否則將會帶來噩夢。 0x000 概述 在React中,渲染數據的形式有多種多樣,但是萬變不離其中,都是用js。 0x001 渲染文本 // 渲染文本 ReactDom.render( 這是一個文本, document.getEle...
摘要:概述剩余參數將沒有對應形參的參數聚合成一個數組語法只聚合未對應形參參數剩余參數只會將沒有對應形參的參數聚合成一個數組而則是包含了所有的參數。剩余參數是數組剩余參數始終是一個數組,而不像是一個偽數組轉化成數組解構剩余參數使用翻譯翻譯后 0x000 概述 剩余參數將沒有對應形參的參數聚合成一個數組 0x001 語法 function(a, b, ...theArgs) { } 0x002 ...
摘要:概述上一章只是稍微了解了一下和相關的簡單用法,這一章需要講一下組件的生命周期。生命周期的概念這玩意似乎很高大上,其實就是一個假概念罷了,直接來實現一個類似的吧。 0x000 概述 上一章只是稍微了解了一下state和setState相關的簡單用法,這一章需要講一下組件的生命周期。 0x001 生命周期的概念 這玩意似乎很高大上,其實就是一個假概念罷了,直接來實現一個類似的吧。大凡事物從...
0x000 概述 這篇文章說的是隊列,隊列的用處也賊大,削峰、限流、消息異步化等等等 0x001 什么是隊列 隊列就是先入先出的數組,就和平常銀行排隊一樣,先排隊的人先處理事務,如圖 showImg(https://segmentfault.com/img/bVbi4Hp?w=1774&h=560);只有兩個操作: 入隊:將數據放入隊列 出隊:將數據取出并處理 0x002 初始化 js中的隊列...
閱讀 2121·2023-04-26 02:19
閱讀 1914·2021-11-19 09:40
閱讀 1704·2021-09-29 09:35
閱讀 3575·2021-09-29 09:34
閱讀 4297·2021-09-07 10:16
閱讀 5530·2021-08-11 11:14
閱讀 3578·2019-08-30 15:54
閱讀 1629·2019-08-30 15:53