ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript チュートリアル -- リンクされたリスト データ構造の実装
リンク リストは、線形リストですが、データを線形順序で格納するのではなく、各ノードの次のノードへのポインタを格納します。以下では、JavaScript コードを使用してリンク リストのデータ構造を実装します
リンク リストは一般的な基本データ構造である線形リストですが、データを線形順序で格納するのではなく、それぞれに格納されるポインター (Pointer)ノード内から次のノードへ - Wikipedia
上記は、Wikipedia によるリンク リストの解釈です。以下では、JavaScript コードを使用してリンク リストのデータ構造を実装します
ノードを表す Node クラスを実装します
/** * Node 类用来表示节点 * element 用来保存节点上的数据 * next 用来保存指向下一个节点的链接 */ function Node(element) { this.element = element; this.next = null; } LList类提供对链表操作的方法 /** * LList 类提供了对链表进行操作的方法 * 链表只有一个属性, * 使用一个 Node 对象来保存该链表的头节点。 */ class LList { constructor() { this.head = new Node('head'); } // 查找节点 find(item) { let currNode = this.head; while(currNode.element !== item) { currNode = currNode.next; } return currNode; } // 查找前一个节点 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; } // 插入新节点 insert(newElement, item) { let newNode = new Node(newElement); let currNode = this.find(item); newNode.next = currNode.next; currNode.next = newNode; } // 删除一个节点 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; } } }
テスト コード
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 を使用した簡単なリンク リスト: smile:
以上がJavaScript チュートリアル -- リンクされたリスト データ構造の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。