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

使用JavaScript實現(xiàn)一個靜態(tài)鏈表

 更新時間:2023年06月26日 08:25:17   作者:freephp  
這篇文章主要為大家詳細介紹了如何使用JavaScript實現(xiàn)一個靜態(tài)鏈表,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以跟隨小編一起了解一下

最近重新開始翻起《大話數(shù)據(jù)結構》,看到了靜態(tài)鏈表部分里面講C語言是利用數(shù)組模擬,覺得十分有趣。但是在JavaScript中,也可以用類似的方式去實現(xiàn),定義一個數(shù)據(jù)域和一個結點域,然后實現(xiàn)鏈表的基礎操作。弱類型語言沒有指針,所以需要自己區(qū)實現(xiàn)。算法的樂趣就在于解決一些思路上的問題,直擊問題的本質(zhì)。
首先可以定義Node類,如下所示:

class Node {
    constructor(value) {
        this.data = value;
        this.next = null;
    }
}

然后實現(xiàn)StaticLinkedList類,先定義簡單的append和display方法:

class StaticLinkedList {
    constructor() {
        this.head = null;
        this.length = 0;
    }
    append(value) {
        const newNode = new Node(value);
        this.length++;
        if (this.head === null) {
            this.head = newNode;
            return;
        }
        let current = this.head;
        while (current.next != null) {
            current = current.next;
        }
        current.next = newNode;
    }
    display() {
        console.log('the static linked list is:\r\n');
        let current = this.head;
        if (current === null) {
            console.log('empty!');
            return;
        }
        while (current !== null) {
            console.log(JSON.stringify(current));
            console.log(`its value is ${current.data}\r\n`);
            current = current.next;
        }
    }
}

其中append方法是在鏈表尾部添加新的Node對象,display方法可以打印出Node對象和它的數(shù)據(jù)。使用這個靜態(tài)鏈表類也很簡單,比如添加4個結點到這個鏈表里面:

const staticLinkedList = new StaticLinkedList();
staticLinkedList.append(3);
staticLinkedList.append(7);
staticLinkedList.append(16);
staticLinkedList.append(24);

我們還應該提供更加靈活添加結點的方法,比如我想在第三個結點位置插入一個新的結點,數(shù)值為11,那么現(xiàn)有的append方法就不適用了,需要定義一個新的插入結點的方法,代碼如下:

    /**
     * Method to insert an new element at the specific location
     *
     * @param {*} elementValue the value of the element that to be inserted
     * @param {*} index the position of the element, from 1 to maximum of the list
     * @returns true/false
     */
    insertAt(elementValue, index) {
        if (index < 1 || index > this.length + 1) {
            console.log('index is out of the range!');
            return false;
        }
        const newNode = new Node(elementValue);
        let startPos = 1;
        let current = this.head;
        while (startPos < index - 1) {
            current = current.next;
            startPos++;
        }
        newNode.next = current.next;
        current.next = newNode;
        this.length++;
        return true;
    }

這段代碼需要理解的是新結點如何添加到鏈表的那兩行代碼,首先是newNode.next = current.next,這行代碼是把新結點的next指向了原來插入前位置的結點的下一個結點。然后current.next = nextNode,把新結點替換掉原來該位置的結點。

為了更好地理解,我畫了一張示意圖:

要注意的是step1和step2的順序不能顛倒,否則會導致代碼運行錯誤。

然后我們還需要定義一個移除指定位置結點的方法,如下所示:

removeAt(index) {
        if (index < 1 || index > this.length + 1) {
            console.log('index is out of the range!');
            return;
        }
        let current = this.head;
        let startPos = 1;
        let previous = null;
        while (startPos < index) {
            previous = current;
            current = current.next;
            startPos++;
        }
        previous.next = current.next;
        this.length--;
    }

我對previous.next = current.next也畫了一張示意圖,刪除原來結點,需要把它前面一個結點的next指向該結點的next。

總結:靜態(tài)鏈表的添加和移除略有不同,需要利用Nod

到此這篇關于使用JavaScript實現(xiàn)一個靜態(tài)鏈表的文章就介紹到這了,更多相關JavaScript靜態(tài)鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • javaScript(JS)替換節(jié)點實現(xiàn)思路介紹

    javaScript(JS)替換節(jié)點實現(xiàn)思路介紹

    獲取要替換的節(jié)點,這種方法只適用于IE瀏覽器以及適用于各種瀏覽器的寫法,感興趣的朋友可以參考下哈
    2013-04-04
  • js實現(xiàn)首屏延遲加載實現(xiàn)方法 js實現(xiàn)多屏單張圖片延遲加載效果

    js實現(xiàn)首屏延遲加載實現(xiàn)方法 js實現(xiàn)多屏單張圖片延遲加載效果

    這篇文章主要介紹了js實現(xiàn)首屏延遲加載實現(xiàn)方法,以及js實現(xiàn)多屏單張圖片延遲加載效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 微信小程序和百度的語音識別接口詳解

    微信小程序和百度的語音識別接口詳解

    這篇文章主要介紹了微信小程序和百度的語音識別接口詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • js實現(xiàn)簡易點擊切換顯示或隱藏

    js實現(xiàn)簡易點擊切換顯示或隱藏

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡易點擊切換顯示或隱藏,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • 用Js實現(xiàn)的動態(tài)增加表格示例自己寫的

    用Js實現(xiàn)的動態(tài)增加表格示例自己寫的

    動態(tài)增加表格的方法有很多,但大多說實現(xiàn)起來比較繁瑣,本文的這個示例是作者自己手寫的,經(jīng)測試效果還不錯,但唯獨不兼容FF,感興趣的朋友可以參考下
    2013-10-10
  • canvas繪制愛心的幾種方法總結(推薦)

    canvas繪制愛心的幾種方法總結(推薦)

    下面小編就為大家?guī)硪黄猚anvas繪制愛心的幾種方法總結(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Javascript實現(xiàn)信息滾動效果

    Javascript實現(xiàn)信息滾動效果

    這篇文章主要為大家詳細介紹了Javascript實現(xiàn)信息滾動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • JavaScript異步編程Promise模式的6個特性

    JavaScript異步編程Promise模式的6個特性

    Promise說起來是一個非常簡單的概念,即使你沒有機會去使用它,很有可能你也了解過它。Promise是一個非常有價值的構造器,能夠幫助你避免使用鑲套匿名方法,而使用更具有可讀性的方式組裝異步代碼。這里我們將介紹6個最簡單的特性,希望對大家有幫助
    2014-04-04
  • 如何提高數(shù)據(jù)訪問速度

    如何提高數(shù)據(jù)訪問速度

    本文主要介紹了提高數(shù)據(jù)訪問速度的方法,具有很好的參考作用,需要的朋友一起來看下吧
    2016-12-12
  • 再談JavaScript異步編程

    再談JavaScript異步編程

    再談JavaScript異步編程,簡單描述了幾種JavaScript異步編程模式,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論

贵州省| 平乡县| 土默特左旗| 汝南县| 锦州市| 曲靖市| 扶余县| 江华| 涟源市| 玉树县| 尼木县| 育儿| 河津市| 甘谷县| 类乌齐县| 阿拉尔市| 栖霞市| 饶河县| 洱源县| 繁峙县| 深圳市| 鲁甸县| 池州市| 漾濞| 全南县| 庄浪县| 伽师县| 平安县| 绩溪县| 三台县| 东兰县| 东方市| 凤冈县| 道孚县| 丰镇市| 仪征市| 长沙市| 定南县| 原阳县| 扎赉特旗| 远安县|