作为数据结构的列表、元组和数组之间有什么区别



这里我不是在谈论一种特定的编程语言。我想知道这些东西和不同的数据结构之间的区别是什么。我认为列表基本上应该是可调整大小的,而数组则不是,但我不确定。

谈论"阵列";以及";列表";作为抽象数据类型,如果不引用任何特定的实现,可能会有点令人困惑,因为这两种类型没有很好地定义。

维基百科的两个页面List(抽象数据类型(和Array数据类型使这种模糊性变得有些明显,其中有不确定的语句,如";列表数据结构的实现可以提供以下一些操作:";。

在许多语言中,有一种类型叫做list和一种类型叫array,它们有一些更好定义的含义。

这是一个非常概括的总结。

列表:

  • 列表是线性的,它是元素的有序序列
  • 您可以访问列表的第一个元素
  • 您可以向列表中添加一个新元素
  • 您可以从第一个元素开始一个接一个地访问列表中的所有元素。最后一个操作是用";"任意访问";(访问l[0], l[1], l[2]等元素(或用两个称为"0"的操作;头部;以及";尾部";,其中CCD_ 4返回CCD_ 5的第一个元素,CCD_

在我看来,四个元素的列表如下:

-> 3 -> 7 -> 12 -> 9

阵列:

  • 一个数组提供";"任意访问";使用索引(访问作为a[something]的元素(
  • 有时索引被限制为0和数组长度之间的整数;有时索引可以是任何东西
  • 您可以很容易地修改您访问的元素,但不一定要添加新元素

允许任何东西用作索引的数组在大多数语言中通常被称为mapdict,其中array严格指由整数索引的线性结构;但在一些语言中,例如PHP,它仍然被称为数组。

在我看来,一个由四个元素组成的数组是这样的:

+--+--+--+--+
| 0| 1| 2| 3|
+--+--+--+--+
| 3| 7|12| 9|
+--+--+--+--+

元组:

  • 元素的线性有序序列
  • 通常可以包含不同类型的元素,而在大多数语言中,列表中的所有元素都必须具有相同的类型
  • 通常无法添加/删除元素
  • 在强类型语言中,如Haskell或OCaml,元组的类型由其长度和其中使用的类型的枚举给出,例如,元组(3, 7, 12.0, "9")的类型为(int, int, float, string),返回特定类型元组的函数不能突然返回不同类型的元组

强类型语言中的元组有时被称为"元组";产品类型";与数学中的笛卡尔乘积类似,并且非常接近C中的struct。弱类型语言中的元组非常接近列表。

是的,你说得对。

可以创建固定大小的数组,如果数组已满,则无法添加项。

列表是一个动态数组,它可以添加您想要的项目数量。在某些语言中,例如C#中,列表中使用了Under-the-hood数组。当添加新项并且数组已满时,将创建大小加倍的新数组。

您可以在C#中看到List<T>的实现

相关内容

  • 没有找到相关文章

最新更新