摘要:最近在看數據結構與算法,但是一直搞不明白在代碼中的實現。今天結合找到的一些資料總結一下鏈表在中的實現。這種結構允許在迭代期間有效地從序列中的任何位置插入或刪除元素。
最近在看js數據結構與算法,但是一直搞不明白在代碼中的實現。今天結合找到的一些資料總結一下鏈表在js中的實現。
首先說下鏈表,在計算機科學中, 一個鏈表是數據元素的線性集合, 元素的線性順序不是由它們在內存中的物理位置給出的。相反,每個元素指向下一個元素。它是由一組節點組成的數據結構,這些節點一起表示序列。在最簡單的形式下,每個節點由數據和到序列中下一個節點的引用(換句話說,鏈接)組成。這種結構允許在迭代期間有效地從序列中的任何位置插入或刪除元素。關于鏈表更多的說明請參考鏈接描述
大致了解了鏈表的概念之后我們就看下鏈表在js代碼中的實現:
單向鏈表
//這里element存放的是該節點上的數據,next存放的是指向下一個節點的鏈接 function Node(element){ this.element = element; this.next = null; } //接下來構建一個List類 function List(node){ this.node = new Node(node); //查找節點 this.find = function(target){ var current = this.node; while(current.element != target){ current = current.next; if(!current){ return false; } } return current; }; //插入節點 this.insert = function(newNode, target){ var newnode = new Node(newNode); var current = this.find(target); newnode.next = current.next; current.next = newnode; }; //查找前一個節點 this.findPre = function(item){ var current = this.node; while(!current.next && current.next.element != item){ current = current.next; } return current; }; //刪除節點 this.delete = function(target){ var deltarget = this.find(target); this.findPre(deltarget).next = deltarget.next; }; }
執行查找節點操作,可見如下輸出:
執行插入節點操作,可見:
執行刪除節點操作,可見:
雙向鏈表
在計算機科學中, 一個雙向鏈表(doubly linked list) 是由一組稱為節點的順序鏈接記錄組成的鏈接數據結構。每個節點包含兩個字段,稱為鏈接,它們是對節點序列中上一個節點和下一個節點的引用。開始節點和結束節點的上一個鏈接和下一個鏈接分別指向某種終止節點,通常是前哨節點或null,以方便遍歷列表。如果只有一個前哨節點,則列表通過前哨節點循環鏈接。它可以被概念化為兩個由相同數據項組成的單鏈表,但順序相反。
function Node(element){ this.pre = null; this.element = element; this.next = null; } function List(node){ this.node = new Node(node); this.find = function(target){ var current = this.node; while(current.element != target){ current = current.next; if(current == null){ return false; } } return current; }; this.insert = function(newNode, target){ var target = this.find(target); var newNode = new Node(newNode); newNode.next = target.next; newNode.pre = target; target.next = newNode; }; this.delete = function(delNode){ var delNode = this.find(delNode); delNode.next.pre = delNode.pre; delNode.pre.next = delNode.next; }; } var list = new List("a"); list.insert("b", "a"); list.insert("c", "b"); list.delete("b"); console.log(list);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/98898.html
摘要:在存儲多個元素時,我們最常用的數據結構可能是數組,究其原因可能是數組訪問方便,可以直接通過訪問,但是數組也存在一定的缺點,數組的大小是固定,數組在執行插入或者刪除的時候成本很高。 在存儲多個元素時,我們最常用的數據結構可能是數組,究其原因可能是數組訪問方便,可以直接通過[]訪問,但是數組也存在一定的缺點,數組的大小是固定,數組在執行插入或者刪除的時候成本很高。鏈表存儲的是有序的元素集合...
摘要:實現移除給定的元素要移除的元素返回值表示移除成功方法說明移除單向鏈表中某個位置的元素。的前端樂園原文鏈接寒假前端學習學習數據結構與算法二鏈表 本系列的第一篇文章: 學習JavaScript數據結構與算法(一),棧與隊列第二篇文章:學習JavaScript數據結構與算法(二):鏈表第三篇文章:學習JavaScript數據結構與算法(三):集合第四篇文章:學習JavaScript數據結構與...
閱讀 2288·2023-04-25 14:22
閱讀 3733·2021-11-15 18:12
閱讀 1293·2019-08-30 15:44
閱讀 3215·2019-08-29 15:37
閱讀 638·2019-08-29 13:49
閱讀 3454·2019-08-26 12:11
閱讀 866·2019-08-23 18:28
閱讀 1581·2019-08-23 14:55