使用JavaScript實(shí)現(xiàn)鏈表的數(shù)據(jù)結(jié)構(gòu)的代碼
鏈表(Linked list)是一種常見(jiàn)的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會(huì)按線性的順序存儲(chǔ)數(shù)據(jù),而是在每一個(gè)節(jié)點(diǎn)里存到下一個(gè)節(jié)點(diǎn)的指針(Pointer) — 維基百科
上面是維基百科對(duì) 鏈表 的解讀。下面我們用 JavaScript 代碼對(duì)鏈表的數(shù)據(jù)結(jié)構(gòu)進(jìn)行實(shí)現(xiàn)
實(shí)現(xiàn)Node類(lèi)表示節(jié)點(diǎn)
/** * Node 類(lèi)用來(lái)表示節(jié)點(diǎn) * element 用來(lái)保存節(jié)點(diǎn)上的數(shù)據(jù) * next 用來(lái)保存指向下一個(gè)節(jié)點(diǎn)的鏈接 */ function Node(element) { this.element = element; this.next = null; } LList類(lèi)提供對(duì)鏈表操作的方法 /** * LList 類(lèi)提供了對(duì)鏈表進(jìn)行操作的方法 * 鏈表只有一個(gè)屬性, * 使用一個(gè) Node 對(duì)象來(lái)保存該鏈表的頭節(jié)點(diǎn)。 */ class LList { constructor() { this.head = new Node('head'); } // 查找節(jié)點(diǎn) find(item) { let currNode = this.head; while(currNode.element !== item) { currNode = currNode.next; } return currNode; } // 查找前一個(gè)節(jié)點(diǎn) findPre(item) { if(item === 'head') throw new Error('now is head!'); let currNode = this.head; while (currNode.next && currNode.next.element !== item) { currNode = currNode.next; } return currNode; } // 插入新節(jié)點(diǎn) insert(newElement, item) { let newNode = new Node(newElement); let currNode = this.find(item); newNode.next = currNode.next; currNode.next = newNode; } // 刪除一個(gè)節(jié)點(diǎn) remove(item) { let preNode = this.findPre(item); if(preNode.next !== null) { preNode.next = preNode.next.next; } } // 顯示鏈表中的元素 display() { let currNode = this.head; while(currNode.next !== null) { console.log(currNode.next.element); currNode = currNode.next; } } }
測(cè)試代碼
const list = new LList(); // LList { head: Node { element: 'head', next: null } } list.insert('0', 'head'); list.insert('1', '0'); list.insert('2', '1'); list.insert('3', '2'); list.remove('1'); console.log(list); // LList { head: Node { element: 'head', next: Node { element: '0', next: [Object] } } } console.log(list.display()); // 0 2 3 console.log(list.findPre('1')); // Node { element: '0', next: Node { element: '1', next: Node { element: '2', next: [Object] } } }
上面就是用JavaScript對(duì)簡(jiǎn)單鏈表的數(shù)據(jù)結(jié)構(gòu)的簡(jiǎn)單實(shí)現(xiàn):smile:
總結(jié)
以上所述是小編給大家介紹的使用JavaScript實(shí)現(xiàn)鏈表的數(shù)據(jù)結(jié)構(gòu)的代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表和雙向循環(huán)鏈表的實(shí)現(xiàn)
- JavaScript數(shù)據(jù)結(jié)構(gòu)之單鏈表和循環(huán)鏈表
- JavaScript數(shù)據(jù)結(jié)構(gòu)之雙向鏈表定義與使用方法示例
- JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表的實(shí)現(xiàn)
- JavaScript數(shù)據(jù)結(jié)構(gòu)鏈表知識(shí)詳解
- JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之鏈表
- JavaScript實(shí)現(xiàn)的鏈表數(shù)據(jù)結(jié)構(gòu)實(shí)例
- JavaScript數(shù)據(jù)結(jié)構(gòu)之鏈表各種操作詳解
相關(guān)文章
javascript四舍五入函數(shù)代碼分享(保留后幾位)
這篇文章主要介紹了javascript四舍五入函數(shù)分享,大家參考使用吧2013-12-12Javascript中使用A標(biāo)簽獲取當(dāng)前目錄的絕對(duì)路徑方法
這篇文章主要介紹了Javascript中使用A標(biāo)簽獲取當(dāng)前目錄的絕對(duì)路徑方法,本文講解的方法比較特別,需要的朋友可以參考下2015-03-03ie9 提示''console'' 未定義問(wèn)題的解決方法
關(guān)掉開(kāi)發(fā)者工具之后,在狀態(tài)欄發(fā)現(xiàn)提示'console' 未定義,為什么之前的運(yùn)行沒(méi)有問(wèn)題,之后的就不行呢2014-03-03JavaScript中yield實(shí)用簡(jiǎn)潔實(shí)現(xiàn)方式
原以為是一個(gè)蠻復(fù)雜的題目,想了許久沒(méi)思路,當(dāng)然要實(shí)現(xiàn)絕對(duì)能實(shí)現(xiàn),但如果分析JavaScript腳本或是動(dòng)態(tài)產(chǎn)生代碼,都太復(fù)雜了。2010-06-06理解javascript函數(shù)式編程中的閉包(closure)
這篇文章主要幫助大家理解javascript函數(shù)式編程中的閉包(closure)概念,通俗地講, JavaScript 中每個(gè)的函數(shù)都是一個(gè)閉包,感興趣的小伙伴們可以參考一下2016-03-03js確認(rèn)刪除對(duì)話(huà)框效果的示例代碼
本篇文章主要是對(duì)js確認(rèn)刪除對(duì)話(huà)框效果的示例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02