亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript中有沒有鏈表

發布時間:2022-06-15 16:58:44 來源:億速云 閱讀:196 作者:iii 欄目:web開發

這篇文章主要介紹“javascript中有沒有鏈表”,在日常操作中,相信很多人在javascript中有沒有鏈表問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”javascript中有沒有鏈表”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

JavaScript中沒有鏈表;鏈表是指多個元素組成的列表,元素存儲不連續而是用next指針連接在一起,因此鏈表增刪非首尾元素時不需要移動元素,只需要更改next的指向即可,在JavaScript中可以利用Object來模擬鏈表。

本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。

javascript中有鏈表嗎

javascript中沒有鏈表

什么是鏈表?

javascript中有沒有鏈表

鏈表是多個元素組成的列表

元素存儲不連續,用next指針連接到一起

JS中沒有鏈表,但是可以用Object模擬鏈表

常用操作

新增節點 append

刪除節點 remove

插入節點 insert

獲取索引 indexOf

鏈表轉字符串 toString

獲取鏈表長度 size

判斷鏈表是否為空 isEmpty

數組 VS 鏈表

數組: 增刪非首尾元素時往往需要移動元素

鏈表:增刪非首尾元素,不許要移動元素,只需要更改next的指向即可。

示例如下:

JavaScript沒有直接的鏈表實現,以下是自己對鏈表的簡單實現

function LinkedList(){
    var Node = function(element){
        this.element = element;
        this.next = null;
    }
    var head = null;
    var length = 0;
    // 定義append方法
    this.append = function(element){
        var node = new Node(element),
        current;
        // 當head為空時,就將新增的node作為head
        if(head === null){
            head = node
        }else{
            // 當head不為空時,將head賦值為當前值,通過判斷當前值的next值是否存在遍歷整個鏈表
            current = head;
            while(current.next){
                current = current.next;
            }
            // 遍歷到鏈表的最后一項時,設置最后一項的next為新增的內容
            current.next = node
        }
        // 每新增一項,length都加1操作
        length++;
    }
    // 定義toString方法
    this.toString = function(){
        var string = '',
        current = head;
        // 最初將當前值定位到頭部,當current存在時,將current的值添加到需要返回的string中,之后將current取為鏈表下一個值
        while(current){
            string += current.element + ( current.next ? ',' : '');
            current = current.next
        }
        // 遍歷完整個鏈表之后返回string
        return string;
    }
    this.removeAt = function(position){
        // 當指定的位置沒有在鏈表的長度范圍內時直接返回null
        if(position > -1 && position < length){
            var current = head,
            index = 0,
            previous;
            // 指定為值是第一個時就將head移到下一個位置
            if(position === 0){
                head = current.next
            }else{
                // 通過遍歷的方式將current移動到指定位置,使用index記錄移動的距離
                while(index < position){
                    previous = current;
                    current = current.next;
                    index++;
                }
                // 刪除是通過將指定位置的上一個節點的next指向指定位置的下一個節點
                previous.next = current.next
            }
            // 一旦刪除成功需要將長度減一并返回刪除的值
            length--;
            return current.element;
        }
        return null;
    }
    // 實現插入功能
    this.insert = function(position,element){
        // 插入的位置不在鏈表范圍內時返回false
        if(position > -1 && position <= length){
            var current = head,
            index = 0,
            node = new Node(element),
            previous;
            // 插入內容在頭部時將插入的node的next指定為current,current此時為head,然后將head指定為插入的node
            if(position === 0){
                node.next = current;
                head = node;
            }else{
                // 通過遍歷的方式將指針指定到插入的位置,index記錄當前移動的位置
                while(index < position){
                    previous = current;
                    current = current.next
                    index++
                }
                // 插入元素通過將插入位置的上一個元素的next指向插入的節點,并將插入的節點的next指向當前節點
                previous.next = node;
                node.next = current;
            }
            // 插入成功之后length加1
            length++;
            return true;
        }
        return false
    }
    // 實現查找指定element的index的功能
    this.indexOf = function(element){
        var index = 0,
        current = head;
        // 通過遍歷的方式尋找指定元素所在的位置.
        // 當前節點存在時,判斷當前節點的element是否為需要尋找的element,如果是就返回此時的index,如果不是就繼續向下遍歷節點
        // 當存在兩個相同內容時只會返回第一個index
        while(current){
            if(current.element === element){
                return index;
            }
            current = current.next;
            index++;
        }
        return -1;
    }
}

實現之后進行如下調用:

var linkedList = new LinkedList();
linkedList.append(15);
linkedList.append(10);
linkedList.insert(1,2) // true
linkedList.insert(2,2) // true
linkedList.toString() // "15,2,2,10"
linkedList.removeAt(3) // 10
linkedList.toString() // "15,2,2"
linkedList.indexOf(2) // 1

到此,關于“javascript中有沒有鏈表”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

岫岩| 新巴尔虎左旗| 南丹县| 怀仁县| 新乡县| 东乌珠穆沁旗| 锦州市| 杭锦旗| 弥渡县| 当涂县| 凤冈县| 景谷| 北票市| 永安市| 黔西县| 乌鲁木齐市| 北流市| 海丰县| 汕头市| 新野县| 益阳市| 鲁山县| 和龙市| 大宁县| 镇巴县| 岳阳市| 土默特左旗| 黑龙江省| 扎赉特旗| 五峰| 中卫市| 青州市| 离岛区| 绵阳市| 古交市| 界首市| 敦化市| 紫云| 金坛市| 错那县| 乌恰县|