成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS數(shù)據(jù)結(jié)構(gòu)0x004:鏈表

sumory / 765人閱讀

摘要:概述這篇文章是說鏈表,鏈表這種數(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

相關(guān)文章

  • React入門0x004jsx 和數(shù)據(jù)渲染

    摘要:概述在中,渲染數(shù)據(jù)的形式有多種多樣,但是萬變不離其中,都是用。當(dāng)然,自由也帶來混亂,需要將這種自由化為思想的自由,而不是工程的自由代碼的自由,否則將會(huì)帶來噩夢(mèng)。 0x000 概述 在React中,渲染數(shù)據(jù)的形式有多種多樣,但是萬變不離其中,都是用js。 0x001 渲染文本 // 渲染文本 ReactDom.render( 這是一個(gè)文本, document.getEle...

    xingpingz 評(píng)論0 收藏0
  • es6基礎(chǔ)0x004:剩余參數(shù)

    摘要:概述剩余參數(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 ...

    waltr 評(píng)論0 收藏0
  • React入門0x007: 生命周期概念

    摘要:概述上一章只是稍微了解了一下和相關(guān)的簡(jiǎn)單用法,這一章需要講一下組件的生命周期。生命周期的概念這玩意似乎很高大上,其實(shí)就是一個(gè)假概念罷了,直接來實(shí)現(xiàn)一個(gè)類似的吧。 0x000 概述 上一章只是稍微了解了一下state和setState相關(guān)的簡(jiǎn)單用法,這一章需要講一下組件的生命周期。 0x001 生命周期的概念 這玩意似乎很高大上,其實(shí)就是一個(gè)假概念罷了,直接來實(shí)現(xiàn)一個(gè)類似的吧。大凡事物從...

    Blackjun 評(píng)論0 收藏0
  • JS數(shù)據(jù)結(jié)構(gòu)0x003:隊(duì)列

    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ì)列...

    xuhong 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<