JavaScript 的数据结构和算法 - 数组篇

数组

数组应该算是人人都知道的吧。

这就是数组

数组其作为编程语言的数据类型,被很多语言支持的。然而不仅如此,它还是一种基础的数据结构

- 线性表结构
- 用一组连续的内存空间,来存储一组具有相同类型的数据

根据上述数组的特性就可得,连续的空间意味着你可以随机访问,其元素访问的时间复杂度为 O(1)。 但是同时也会带来一些局限性。

- 插入需要调整其插入位置之后的所有数据
- 同理,删除也是会存在类似的情况。

数组的插入和删除平均时间复杂度就在 O(n)。

这么看来,数组还是蛮简单的哈。没错,是这样。不过你别骄傲,数组就是基础。如果连这都不会,接下能做的 可能真的就是从入门到放弃了。

数组你还应该

数组是一次直接申请到一组连续的空间,这就意味着,当空间不足时,你就会需要扩展你的空间了,怎么扩展, 重新申请一组双倍大小的连续空间(当然这儿的双倍是大家常用手段)。

当然,你以为这就完了,你还要考虑到,当一个操作需要扩展是,也会涉及到转移数据的问题,一次性的大量数据 迁移,你觉得会不会带来新的问题呢?

大家都知道,CPU 都会对数组的操作进行优化,这就意味着,有些时候相同的条件下,数组会比其他数据结构更 具有优势。

真的够了吗?

接下来说一些不是很常见的话题,或许这些你也都知道。别急,你可以直接跳过了(虽然你不知道我要说什么,自信 就完了)。

数组其实还是有很多理解的,比方我再刚开始介绍数组时提到的,它是编程语言的数据类型,还是数据结构。 这就意味着,编程语言的数据类型是由数据结构实现的。可是也会存在数据类型由散列表、链表、搜索树或其他 数据结构实现。有没有感觉有点儿不一样了,说好的不是这样的啊。

在算法的理解中,它更应该是一种理论上计算机科学模型,专注于数组的基本性质上。这样的话,你就能理解某些 编程语言上的数组和上述的描述会有点儿出入了。

二维数组,是不是没想到,数学上,我们称之为 矩阵。
多维数组,这个是不是就更不好理解了,嘿嘿。
动态数组,这个是不是也懵逼的。

其实像上面说的,都是对一维数组,也就是上面说的 数组 的扩展,你现在不明白没关系(因为目前我也没有 很通透的熟悉完所有的数组),随着后面的展开,你会更加了解和熟悉的。数组是很基础的数据结构, 它的特性一定要了然如胸,不然后面的数据结构和算法的内容会有点儿吃力,这是不好的现象。

因为本系列的课程主要都是围绕着 JavaScript 的数据结构和算法的,所以可能本系列对应的代码实现和前面 文本描述的会有一些出入,请参考刚才说的,你就明白是为什么。

本作品采用《CC 协议》,转载必须注明作者和本文链接
路漫漫其修远兮,吾将上下而求索。
MasterShu
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!