最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解JavaScript中怎么實現(xiàn)鏈表

 更新時間:2023年12月15日 11:41:33   作者:軟件技術(shù)愛好者  
鏈表是一系列節(jié)點串聯(lián)形成的數(shù)據(jù)結(jié)構(gòu),鏈表存儲有序的元素集合,鏈表中的元素在內(nèi)存中并不是連續(xù)放置的,本文給大家介紹了在JavaScript中怎么實現(xiàn)鏈表,需要的朋友可以參考下

JavaScript中怎么實現(xiàn)鏈表?

學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的的鏈表和樹時,會遇到節(jié)點(node)這個詞,節(jié)點是處理數(shù)據(jù)結(jié)構(gòu)的鏈表和樹的基礎(chǔ)。節(jié)點是一種數(shù)據(jù)元素,包括兩個部分:一個是實際需要用到的數(shù)據(jù);另一個存儲下一個節(jié)點位置。

鏈表是一系列節(jié)點串聯(lián)形成的數(shù)據(jù)結(jié)構(gòu),鏈表存儲有序的元素集合,鏈表中的元素在內(nèi)存中并不是連續(xù)放置的。每個元素由一個存儲元素本身的部分和一個指向下一個元素的鏈接部分組成。因此鏈表增刪非首尾元素時不需要移動元素,只需要更改鏈接部分的值即可。

在此僅看單鏈表,單鏈表每個節(jié)點的結(jié)構(gòu)如下:

單鏈表,在這種類型的數(shù)據(jù)結(jié)構(gòu)中,任何兩個數(shù)據(jù)元素之間只有一個鏈接,參見下圖:

鏈表的操作包括了創(chuàng)建、刪除、插入、輸出等。

創(chuàng)建就是空間的分配,將頭、尾指針及鏈表結(jié)點個數(shù)等初始化。刪除和插入根據(jù)被操作元素的位置可以細分為頭刪除(插入),尾刪除(插入),中間刪除(插入)。

插入操作

頭插入實際上是增加一個新節(jié)點,然后把新增加的結(jié)點指針指向原來頭指針指向的元素,再把頭指針指向新增的節(jié)點。

尾插入也是增加一個新節(jié)點,該節(jié)點指針置為null,然后把原尾結(jié)點指針指向新增加的節(jié)點,最后把尾指針指向新增加的節(jié)點即可。

中間插入稍復(fù)雜,首先增加一個節(jié)點,然后新增節(jié)點的指針指向插入位置的后一個節(jié)點,把插入位置的前一個節(jié)點指針指向新插入節(jié)點即可。

刪除操作

刪除頭元素時,先將頭指針指向下一個節(jié)點,然后把原頭結(jié)點的指針置空即可。

刪除尾元素時,首先找到鏈表倒數(shù)第2個元素,然后把尾指針指向這個元素,接著把原倒數(shù)第2個元素的指針置空。

刪除中間元素相對復(fù)雜一些,首先將要刪除的節(jié)點的前一個節(jié)點指針指向要刪除的節(jié)點的下一個節(jié)點,然后把要刪除節(jié)點的指針置空。

上面提到是單鏈表最基本的操作,除此之外還有其它操作不多說了。下面給出代碼示例。

在 JavaScript中,我們怎么實現(xiàn)鏈表呢?

現(xiàn)在以單鏈表的建立和遍歷為例介紹。項目結(jié)構(gòu)如下

SingleLinkedList.js文件內(nèi)容如下:

//定義單向鏈表的節(jié)點類
class Node{
    constructor(data){
        this.data = data    //節(jié)點的數(shù)據(jù)部分
        this.next = null    //節(jié)點的鏈接部分(指針部分)   
    }
}
//定義單向鏈表類
class SingleLinked{  
    constructor(){
        this.size = 0  //單鏈表的長度,用來記錄鏈表中的節(jié)點個數(shù),為一個空鏈表
        this.head = new Node('head')  //是鏈表的頭指針:記錄鏈表的起始地址
        this.currentNode = ''  //用來記錄當(dāng)前節(jié)點
    }
    //獲取鏈表的長度
    getLength(){
        return this.size
    }
    //判斷鏈表是否為空
    isEmpty(){
        return this.size === 0   //如果this.size為0則說明鏈表為空,即返回true
    }
    //遍歷鏈表:不重復(fù)的訪問鏈表中的每一個節(jié)點
    displayList(){
        var list = ''
        var currentNode = this.head  //指向鏈表的頭指針
        while(currentNode){  //若當(dāng)前節(jié)點不為空,則執(zhí)行循環(huán)
            list+=currentNode.data    //連接節(jié)點的數(shù)據(jù)域
            currentNode = currentNode.next  //讓當(dāng)前指針指向當(dāng)前節(jié)點的下一個節(jié)點
            if(currentNode){   //如果currentNode不為空則加上連接符
                list += '->'  //鏈表節(jié)點的連接符
            }
        }
        console.log(list)
    }
 
    //獲取鏈表的最后一個節(jié)點
    findLast(){
        var currNode = this.head
        while(currNode.next){   //若當(dāng)前節(jié)點的next域為空,則他是鏈表的最后一個節(jié)點,跳出循環(huán)
            currNode = currNode.next  //若當(dāng)前節(jié)點的next域不為空則讓指針指向當(dāng)前節(jié)點的下一個節(jié)點
        }
        return currNode
    }
 
    //采用尾插法給鏈表插入元素
    appendNode(element){
        var currNode = this.findLast()  //找到鏈表的最后一個節(jié)點
        var newNode = new Node(element)  //創(chuàng)建一個新的節(jié)點
        currNode.next = newNode
        newNode.next = null
        this.size++   //鏈表的長度加1
    }
 
    //刪除鏈表中的一個節(jié)點
    delete(element){
        //this.displayList()
        var currentNode = this.head
        try{
            while((currentNode.next!=null)&&(currentNode.next.element!=element)){  //判斷,如果節(jié)點靠后則節(jié)點的next的next為空,不為空時進行刪除
            if(currentNode.next.data === element){
                currentNode.next = currentNode.next.next    
                this.size--
            }else{
                currentNode = currentNode.next
                }
            }
        }
        catch(e){   //測試函數(shù),判斷函數(shù)的運行錯誤
            console.log(e)
        }
    }
}

測試代碼內(nèi)容如下,我這里保存文件名為 單鏈表測試.html,將此文件和SingleLinkedList.js放到同一目錄中:

<script src="./SingleLinkedList.js"></script>
    <script>  //不能寫在有js代碼的JavaScript中
        var slist = new SingleLinked()
        console.log(slist.isEmpty())  //打印鏈表是否為空,若為空則輸出true
        slist.appendNode(1001)   //創(chuàng)建鏈表節(jié)點
        slist.appendNode(1002)   //創(chuàng)建鏈表節(jié)點
        //創(chuàng)建鏈表更多節(jié)點
        var arr = [1020,1234,1006,788,5512]
        for(var i=0;i<arr.length;i++){
            slist.appendNode(arr[i])
        }
        
        //遍歷輸出鏈表
        slist.displayList()
 
        //刪除鏈表中的1006元素
        slist.delete(1006)
        slist.displayList()
</script>

用瀏覽器打開 單鏈表測試.html,按下F12鍵單開控制臺,查看結(jié)果:

以上就是詳解JavaScript中怎么實現(xiàn)鏈表的詳細內(nèi)容,更多關(guān)于JavaScript實現(xiàn)鏈表的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JavaScript版本迷局介紹

    JavaScript版本迷局介紹

    有人說喜歡一個人,沒必要了解她的過去,然而想讀懂一個人,卻需要了解她的過去。
    2011-01-01
  • js中線性查找的使用

    js中線性查找的使用

    JavaScript中,線性查找是最簡單的查找算法,從數(shù)組首元素開始逐個比對,直到找到目標值或遍歷結(jié)束,適用于無序數(shù)組,時間復(fù)雜度為 O(n),下面就來詳細的介紹一下js 線性查找的使用
    2026-03-03
  • JS調(diào)用CS里的帶參方法實例

    JS調(diào)用CS里的帶參方法實例

    js調(diào)用CS里的方法有很多,我用一種簡單的方法,如下,有需要的朋友可以參考一下
    2013-08-08
  • 使用?JavaScript?Promise?讀取?Github?用戶數(shù)據(jù)

    使用?JavaScript?Promise?讀取?Github?用戶數(shù)據(jù)

    這篇文章主要介紹了使用JavaScript?Promise讀取Github用戶數(shù)據(jù),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • 微信小程序頁面跳轉(zhuǎn)功能之從列表的item項跳轉(zhuǎn)到下一個頁面的方法

    微信小程序頁面跳轉(zhuǎn)功能之從列表的item項跳轉(zhuǎn)到下一個頁面的方法

    這篇文章主要介紹了微信小程序頁面跳轉(zhuǎn)功能之從列表的item項跳轉(zhuǎn)到下一個頁面的方法,結(jié)合具體實例形式總結(jié)分析了微信小程序頁面跳轉(zhuǎn)及列表item項跳轉(zhuǎn)頁面的相關(guān)操作技巧,需要的朋友可以參考下
    2017-11-11
  • 前端BOM操作常用命令詳解及代碼案例

    前端BOM操作常用命令詳解及代碼案例

    瀏覽器對象模型(BOM)是瀏覽器提供的JavaScript操作瀏覽器的API,提供了與網(wǎng)頁無關(guān)的瀏覽器功能對象,這篇文章主要給大家介紹了關(guān)于前端BOM操作常用命令詳解及代碼案例的相關(guān)資料,需要的朋友可以參考下
    2024-10-10
  • JavaScript 學(xué)習(xí)點滴記錄

    JavaScript 學(xué)習(xí)點滴記錄

    HTML DOM (Document Object Model文檔對象模型) DOM是一種與瀏覽器,平臺,語言的接口,使得你可以訪問頁面其他的標準組件. DOM是以層次結(jié)構(gòu)組織的節(jié)點或信息片斷的集合.
    2009-04-04
  • 全面了解JavaScript對象進階

    全面了解JavaScript對象進階

    下面小編就為大家?guī)硪黄媪私釰avaScript對象進階。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • JS前端開發(fā)之exec()和match()的對比使用

    JS前端開發(fā)之exec()和match()的對比使用

    match()方法可在字符串內(nèi)檢索指定的值,或找到一個或多個正則表達式的匹配,下面這篇文章主要給大家介紹了關(guān)于JS前端開發(fā)之exec()和match()的對比使用的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • js 優(yōu)化次數(shù)過多的循環(huán) 考慮到性能問題

    js 優(yōu)化次數(shù)過多的循環(huán) 考慮到性能問題

    IE沒有我們想象中笨,它知道總的循環(huán)次數(shù)還是一千萬次。因此,得把這一百個十萬次循環(huán)分開執(zhí)行。雖然Javascript是單線程的,但也可以通過setTimeout或setInterval模擬多線程。
    2011-03-03

最新評論

瓦房店市| 五河县| 那坡县| 永吉县| 大渡口区| 杨浦区| 大姚县| 湟中县| 子长县| 柞水县| 措美县| 盐边县| 富顺县| 汨罗市| 广汉市| 漳州市| 漯河市| 屏南县| 法库县| 新营市| 尼玛县| 谷城县| 长海县| 安西县| 澄江县| 阜南县| 志丹县| 淮滨县| 化德县| 奉节县| 双辽市| 海丰县| 灯塔市| 米林县| 瓦房店市| 泾阳县| 东乌珠穆沁旗| 新竹县| 溆浦县| 久治县| 调兵山市|