Javascript中的链表

Javascript中的链表

数据结构的介绍文章。链表概念与应用于 Javascript 语言的实际示例。

介绍

数据结构是一种有效处理大量数据的手段,了解它的结构和组成为我们提供了更有效的工具来设计与某些问题相关的产品。这次我们将进行链表介绍,回顾它的特点和用途。

链表的概念

链表是由相互自引用的元素组成的线性数据结构,即对于链表的每个元素,它们将具有指向下一个元素的所指对象或指针。请注意,这些元素存储在内存中的非连续位置。

链表由以下元素组成:

  1. 链表 : 元素管理结构。
  2. 节点 :存储和连接元素,包含至少一个任何类型的感兴趣数据和指向下一个节点的指针。
  3. :列表的初始节点。

链表类型

链表有多种实现,它们的区别在于它们指向的引用,一些实现包含循环方式的引用,而另一些可能具有对后继节点或前驱节点的引用。

这里有一些类型的链表:

简单链表

链表,其中每个节点都包含一个唯一的链接后继元素字段。

双向链表

链表,其中每个节点都包含一个双向链接,节点指向后继元素作为前驱。

循环链表

类似于简单链表,区别在于最后一个节点指向链表中的第一个节点。

在Javascript中实现到链表

要在 Javascript 中实现链表,我们将依赖存储库 https://github.com/trekhleb/javascript-algorithms 包含出色的实施;但是我们会简化一些方法和结构以便能够理解它的操作。我们将支持面向对象编程的每一个人。

类链表

表示一个链表的类,这个类将有 表示初始节点的属性。启动时,标题将设置为 无效的 . LinkedList 类在启动时不会有任何与之关联的节点。

类链表{
构造函数(){
this.head = null;
}

类节点

代表一个节点的类,这个类会有两个属性,属性 价值 表示要存储的感兴趣的数据和 下一个 属性表示指向列表中下一项的指针。

类节点{
构造函数(值,下一个){
this.value = 值;
this.next = 下一个;
}
}

接下来的步骤是将方法添加到 链表 类将帮助我们执行列表中节点的操作。例如,元素的插入、搜索和删除。

节点插入方法

我们将从将节点插入链表的基本方法开始。

插入节点()

插入节点(值){
const newNode = new Node(value, null);
如果(this.head === null){
this.head = newNode;
} 别的 {
让当前 = this.head;
而(当前.下一个){
当前=当前.下一个;
}
current.next = 新节点;
}
}
}

在代码片段中:

  • 使用参数指示的值创建一个新节点。
  • 第一个节点存储在 财产。
  • 后续节点将绑定在 下一个 最后一个元素的属性,以此类推。

笔记 :我们可以将列表的最后一个元素与 下一个 财产,这将有 无效的 价值。

节点显示方式

我们将继续为每个节点打印值的基本方法。

打印()

打印(){
让当前 = this.head;
而(当前){
控制台.log(current.value);
当前=当前.下一个;
}
}

在代码片段中:

  • 我们逐个元素遍历列表元素打印 价值 的财产。

节点搜索方法

我们将继续使用基于元素值搜索元素的基本方法。这一次,第一个匹配被返回。

查找节点()

查找节点(值){
让当前 = this.head;
而(当前){
如果(当前值 === 值){
返回电流;
}
当前=当前.下一个;
}
返回空值;
}

在代码片段中:

  • 我们在 while 循环中使用相同的元素遍历技术,但添加了一个比较值的条件。
  • 如果该值等于要查找的值,则返回该元素。
  • 如果值不相等,它将继续循环遍历列表。
  • 如果没有找到元素, 无效的 被退回。

节点移除方法

我们将继续使用基于物品价值移除物品的基本方法。

删除节点()

删除节点(值){
如果(this.head.value === 值){
this.head = this.head.next;
} 别的 {
让当前 = this.head;
而(当前.下一个){
if (current.next.value === value) {
current.next = current.next.next;
返回;
}
当前=当前.下一个;
}
}
}

在代码片段中:

  • 我们将列表的元素循环到具有值的节点。
  • 如果我们找到了节点,我们会做的就是省略链表的元素,也就是跳过与后面那个元素相连的那个元素,彻底消除当前的引用。

完整代码

结尾

在本文中,我们使用链表的基本方法,但是,这些方法应该足以涵盖链表的基本用例。当然,有很多方法可以扩展和改进我们的示例。我建议继续探索实现并根据您的需要调整它们。

感谢您来到这里,如果您觉得这很有用,请不要忘记鼓掌并分享。订阅以接收更多内容。

如果您需要其他帮助,请联系我。

非常感谢您的阅读,感谢您的宝贵时间。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/2910/39203108

posted @ 2022-08-31 08:40  哈哈哈来了啊啊啊  阅读(427)  评论(0)    收藏  举报