真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript中有沒(méi)有鏈表

這篇文章主要介紹“javascript中有沒(méi)有鏈表”,在日常操作中,相信很多人在javascript中有沒(méi)有鏈表問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”javascript中有沒(méi)有鏈表”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

我們提供的服務(wù)有:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、連云ssl等。為超過(guò)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的連云網(wǎng)站制作公司

JavaScript中沒(méi)有鏈表;鏈表是指多個(gè)元素組成的列表,元素存儲(chǔ)不連續(xù)而是用next指針連接在一起,因此鏈表增刪非首尾元素時(shí)不需要移動(dòng)元素,只需要更改next的指向即可,在JavaScript中可以利用Object來(lái)模擬鏈表。

本教程操作環(huán)境:windows10系統(tǒng)、javascript1.8.5版、Dell G3電腦。

javascript中有鏈表嗎

javascript中沒(méi)有鏈表

什么是鏈表?

javascript中有沒(méi)有鏈表

鏈表是多個(gè)元素組成的列表

元素存儲(chǔ)不連續(xù),用next指針連接到一起

JS中沒(méi)有鏈表,但是可以用Object模擬鏈表

常用操作

新增節(jié)點(diǎn) append

刪除節(jié)點(diǎn) remove

插入節(jié)點(diǎn) insert

獲取索引 indexOf

鏈表轉(zhuǎn)字符串 toString

獲取鏈表長(zhǎng)度 size

判斷鏈表是否為空 isEmpty

數(shù)組 VS 鏈表

數(shù)組: 增刪非首尾元素時(shí)往往需要移動(dòng)元素

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

示例如下:

JavaScript沒(méi)有直接的鏈表實(shí)現(xiàn),以下是自己對(duì)鏈表的簡(jiǎn)單實(shí)現(xiàn)

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

實(shí)現(xiàn)之后進(jìn)行如下調(diào)用:

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

到此,關(guān)于“javascript中有沒(méi)有鏈表”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!


分享標(biāo)題:javascript中有沒(méi)有鏈表
當(dāng)前網(wǎng)址:http://weahome.cn/article/ijddod.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部