vue.js使用的编程语言_使用JS编程:链接列表

vue.js使用的编程语言

在本系列文章中,我们介绍了JavaScript棱镜中不同概念,算法和数据结构的基础。 长期以来,计算机科学一直是JS开发人员忽略的主题,因为它在现代开发中不适用。

我们已经为我们解决了一些基本问题,而且我们将永远不必实现自己的基本算法。 但是,对这些概念的正确理解确实可以改善我们。 不是我们JavaScript知识,而是我们对软件开发的一般理解。

在本文中,我们将研究链接列表-它们的作用以及如何实现它们。

一些理论知识

首先,什么是链表。 这是一种数据结构,它将存储不同的值,并且经常与数组进行比较。 它们都具有相同的目的-存储一些数据,但不同之处在于它们实际存储数据的方式。

数组通常具有固定的大小和将存储的已定义数据类型。 这允许它获取连续的内存,它将用于存储我们给它的值。

另一方面,链表没有固定大小。 我们一个接一个地添加元素,每个元素都负责指向下一个。 因此,我们传递的值将驻留在内存中的不同位置,并取决于列表中的项以指向下一个。

另一个区别是两个数据结构中操作的性能。 数组访问元素的时间恒定。 这意味着采用数组的第一个元素将与采用第100个元素相同。 这是因为元素存储在内存中的方式。

另一方面,在链接列表中,访问元素要求您遍历列表中的各项并检查是否已找到每个元素。 在最坏的情况下,您将不得不遍历整个列表,这比数组要慢得多。

我们应用于此类结构的另一个常见操作是元素的添加和删除。 由于数组的静态特性,此处的数组往往会变得很慢。 它们具有固定的内存量,添加新项通常需要在分配更多内存的同时复制整个数组。 现在,想象一下在数组中间的特定位置添加一个元素,这会导致什么样的改组。 删除元素是可用的,但实际上您仅使该值无效。 内存仍为阵列保留。

在这种情况下,链接列表的性能更高。 在列表中的任何位置添加元素将仅需要更改指针。 删除也是一种快速的操作,它还将释放为特定元素分配的内存。 如果没有引用,它将被垃圾收集。

实施链表

在开始实施之前,需要注意一些事项。 链表有多种类型,并且有多种实现方式。

我们将实现最基本的链接列表 。 它由节点组成,每个音符都有指向下一个的指针。 列表中的最后一个节点将指向null,这在我们迭代它并想知道何时停止时很有用。

在开始之前,我想说的是可能有比我在这里展示的更好的实现。 对于本文而言,将尽可能详尽地描述链接列表的逻辑及其操作。

length属性用于跟踪列表的大小,而不必每次需要时都对其进行迭代。 头是列表中的第一项,当我们遍历数据结构时,我们将以此为起点。

要实现的第一个逻辑就是add方法。 每当我们尝试将项目添加到列表中时,它都会遍历列表,在其中找到最后一个节点,然后在其后添加新项目。 唯一的特殊情况是列表仍然为空。

这里可能的陷阱是忘记增加length属性,这将导致每次设置新的头指针。

我提到了添加元素时链接列表的速度如何,但是这种添加方法将迫使我们每次想要向列表附加另一个节点时,就循环遍历列表一次。

另一种方法是将元素作为第一项添加到列表中,将其添加为新的标题并使其指向之前的head元素。 无论数据结构的大小如何,此功能将始终需要相同数量的步骤。

现在,我们可以将元素添加到链接列表中,万岁! 当然,有时我们在添加节点时会出错,我们将希望通过删除元素来修复它们。 一旦将头缠住它,这也是非常简单的。

我们将按其值删除一个元素。 因此,首先我们需要找到要删除的元素,它可能在列表的中间。 如果仅将其删除或将其设置为null,它将断开到其后元素的链接,因此我们必须考虑其他问题。

相反,我们要做的是遍历列表并检查每个元素是否都是我们要搜索的元素。 同时,我们还将跟踪我们测试过的先前元素。

因此,当我们找到要查找的节点时,只需将前一个节点的下一个指针设置为指向当前节点的下一个指针即可。 这样,我们要删除的节点将没有对其的引用,并将被垃圾回收。

要注意的是要删除的节点是头的情况。 还请记住要更改length属性。

如果需要查找列表中是否有特定值的节点,可以使用我们在remove方法中编写的逻辑。

其他种类的链表

双向链表是一种与普通链表相似的数据结构,不同之处在于每个节点都保留着指向下一个节点上一个节点的指针。 当我们不仅要向前浏览整个列表时,这很有用。

循环链接列表是一个列表,其中最后一个节点的下一个指针指向列表的第一个节点,因此创建了一个循环结构。 这很有用,因为即使我们从一开始就不这样做,它也使我们可以遍历整个列表,但这也很棘手。

下一步是什么?

我希望本文能帮助您了解链表数据结构的基础。 您可以通过按住拍手按钮并与朋友分享这篇文章来帮助我!

翻译自: https://hackernoon.com/programming-with-js-linked-lists-4d776aa96d44

vue.js使用的编程语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值