日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

数据结构与算法JavaScript描述——链表

發布時間:2025/6/17 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法JavaScript描述——链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.數組的缺點                                           數組不總是組織數據的最佳數據結構,原因如下。 在很多編程語言中,數組的長度是固定的,所以當數組已被數據填滿時,再要加入新的元素就會非常困難。 在數組中,添加和刪除元素也很麻煩,因為需要將數組中的其他元素向前或向后平移,以反映數組剛剛進行了添加或刪除操作。 然而,JavaScript 的數組并不存在上述問題,因為使用splice() 方法不需要再訪問數組中的其他元素了。 JavaScript 中數組的主要問題是,它們被實現成了對象,與其他語言(比如C++ 和Java)的數組相比,效率很低 如果你發現數組在實際使用時很慢,就可以考慮使用鏈表來替代它。除了對數據的隨機訪問,鏈表幾乎可以用在任何可以使用一維數組的情況中。 如果需要隨機訪問,數組仍然是更好的選擇。 2.定義鏈表                                                   鏈表是由一組節點組成的集合。每個節點都使用一個對象的引用指向它的后繼。指向另一個節點的引用叫做鏈。 數組元素靠它們的位置進行引用,鏈表元素則是靠相互之間的關系進行引用。 鏈表中插入一個節點的效率很高。 向鏈表中插入一個節點,需要修改它前面的節點(前驅),使其指向新加入的節點,而新加入的節點則指向原來前驅指向的節點。 從鏈表中刪除一個元素也很簡單。 將待刪除元素的前驅節點指向待刪除元素的后繼節點, 同時將待刪除元素指向null,元素就刪除成功了。 鏈表還有其他一些操作,但插入和刪除元素最能說明鏈表為什么如此有用。 3.設計一個基于對象的鏈表                                         我們設計的鏈表包含兩個類。 Node 類用來表示節點,LinkedList 類提供了插入節點、刪除節點、顯示列表元素的方法,以及其他一些輔助方法。 Node類: LinkedList類: 插入新節點: insert,該方法向鏈表中插入一個節點。向鏈表中插入新節點時,需要明確指出要在哪個節點前面或后面插入。 如何在一個已知節點后面插入元素: 在一個已知節點后面插入元素時,先要找到“后面”的節點。為此,創建一個輔助方法find(),該方法遍歷鏈表,查找給定數據。如果找到數據,該方法就返回保存該數據的節點。 find() 方法演示了如何在鏈表上進行移動。首先,創建一個新節點,并將鏈表的頭節點賦給這個新創建的節點。 然后在鏈表上進行循環,如果當前節點的element 屬性和我們要找的信息不符,就從當前節點移動到下一個節點。 如果查找成功,該方法返回包含該數據的節點;否則,返回null。 從鏈表中刪除一個節點: 從鏈表中刪除節點時,需要先找到待刪除節點前面的節點。找到這個節點后,修改它的next 屬性,使其不再指向待刪除節點,而是指向待刪除節點的下一個節點。 代碼實現: <script type="text/javascript"> /** * Node類: * element 用來保存節點上的數據 * next 用來保存指向下一個節點的鏈接 */ function Node(element){this.element = element;this.next = null; }/** * LinkedList類 * LList 類提供了對鏈表進行操作的方法。 * 包括插入刪除節點、在列表中查找給定的值。 * 鏈表只有一個屬性,那就是使用一個Node 對象來保存該鏈表的頭節點。 * * head 節點的next 屬性被初始化為null * 當有新元素插入時,next 會指向新的元素,所以在這里我們沒有修改next 的值。 */ function LList(){this.head = new Node("head");this.find = find;this.insert = insert;this.remove = remove;this.display = display;this.findPrevious = findPrevious; }/** * 遍歷鏈表,查找給定數據。 * 如果找到數據,該方法就返回保存該數據的節點 */ function find(item){var currNode = this.head;while(currNode.element != item){currNode = currNode.next;}return currNode; }/* * 插入新節點 * 在item元素(已知節點)后面插入newElement */ function insert(newElement, item){var newNode = new Node(newElement);var current = this.find(item);newNode.next = current.next;current.next = newNode; }/** * 查找待刪除元素的上一個節點 * 該方法遍歷鏈表中的元素,檢查每一個節點的下一個節點中是否存儲著待刪除數據。 * 如果找到,返回該節點(即“前一個”節點) */ function findPrevious(item){var currNode = this.head;while(currNode.next!=null && currNode.next.element != item){currNode = currNode.next;}return currNode; }/** * 從鏈表中刪除節點 * 需要先找到待刪除節點前面的節點。 * 找到這個節點后,修改它的next 屬性,使其不再指向待刪除節點,而是指向待刪除節點的下一個節點。 */ function remove(item){var prevNode = this.findPrevious(item);if(prevNode.next != null){prevNode.next = prevNode.next.next;} }/* * 顯示鏈表中的元素 */ function display(){var currNode = this.head;while(currNode.next != null){console.log(currNode.next.element);currNode = currNode.next;} }//測試代碼 var cities = new LList(); cities.insert("Conway", "head"); cities.insert("Russellville", "Conway"); cities.insert("Carlisle", "Russellville"); cities.insert("Alma", "Carlisle"); cities.display(); cities.remove("Carlisle"); cities.display();</script>

打印:

轉載于:https://www.cnblogs.com/tenWood/p/7231923.html

總結

以上是生活随笔為你收集整理的数据结构与算法JavaScript描述——链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。