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