JavaScript链式存储、链式存储的结点是什么
在JavaScript中,链式存储是一种数据结构,用于存储和管理一系列相关联的数据项。链式存储的核心思想是通过指针将各个节点连接起来,形成一个有序的序列。每个节点不仅包含数据,还包含指向下一个节点的引用。本文将介绍如何实现链式存储,并详细解释链式存储的节点。
解决方案
链式存储可以通过多种方式实现,常见的有单向链表和双向链表。本文将重点介绍单向链表的实现,并提供详细的代码示例。
单向链表的基本结构
单向链表中的每个节点包含两个部分:数据和指向下一个节点的指针。我们可以通过定义一个节点类来实现这一点。
javascript
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
创建链表
链表本身可以定义为一个类,包含一个头节点(head)和一些基本操作方法,如插入、删除和遍历。
javascript
class LinkedList {
constructor() {
this.head = null;
}</p>
<p>// 在链表末尾添加一个新节点
append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}</p>
<p>// 遍历链表并打印所有节点的数据
printList() {
let current = this.head;
while (current) {
console.log(current.data);
current = current.next;
}
}</p>
<p>// 删除指定数据的节点
delete(data) {
if (!this.head) return;</p>
<pre><code>if (this.head.data === data) {
this.head = this.head.next;
return;
}
let current = this.head;
while (current.next && current.next.data !== data) {
current = current.next;
}
if (current.next) {
current.next = current.next.next;
}
}
}
使用链表
下面是一个简单的示例,展示如何使用上述链表类进行操作。
javascript
const list = new LinkedList();
list.append(1);
list.append(2);
list.append(3);</p>
<p>console.log("初始链表:");
list.printList(); // 输出: 1 2 3</p>
<p>list.delete(2);
console.log("删除节点2后的链表:");
list.printList(); // 输出: 1 3
双向链表
除了单向链表,双向链表也是一种常见的链式存储结构。双向链表中的每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针。
javascript
class DoublyNode {
constructor(data) {
this.data = data;
this.next = null;
this.prev = null;
}
}</p>
<p>class DoublyLinkedList {
constructor() {
this.head = null;
this.tail = null;
}</p>
<p>append(data) {
const newNode = new DoublyNode(data);
if (!this.head) {
this.head = newNode;
this.tail = newNode;
} else {
this.tail.next = newNode;
newNode.prev = this.tail;
this.tail = newNode;
}
}</p>
<p>printList() {
let current = this.head;
while (current) {
console.log(current.data);
current = current.next;
}
}</p>
<p>delete(data) {
if (!this.head) return;</p>
<pre><code>if (this.head.data === data) {
this.head = this.head.next;
if (this.head) {
this.head.prev = null;
} else {
this.tail = null;
}
return;
}
let current = this.head;
while (current && current.data !== data) {
current = current.next;
}
if (current) {
if (current.next) {
current.next.prev = current.prev;
} else {
this.tail = current.prev;
}
if (current.prev) {
current.prev.next = current.next;
}
}
}
}
const doublyList = new DoublyLinkedList();
doublyList.append(1);
doublyList.append(2);
doublyList.append(3);
console.log(“初始双向链表:”);
doublyList.printList(); // 输出: 1 2 3
doublyList.delete(2);
console.log(“删除节点2后的双向链表:”);
doublyList.printList(); // 输出: 1 3
通过上述代码示例,我们可以看到链式存储的实现和操作方法。无论是单向链表还是双向链表,它们都提供了灵活的数据管理和操作方式。希望本文能帮助你更好地理解和使用链式存储。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/68517.html<