这里我不是在谈论一种特定的编程语言。我想知道这些东西和不同的数据结构之间的区别是什么。我认为列表基本上应该是可调整大小的,而数组则不是,但我不确定。
谈论"阵列";以及";列表";作为抽象数据类型,如果不引用任何特定的实现,可能会有点令人困惑,因为这两种类型没有很好地定义。
维基百科的两个页面List(抽象数据类型(和Array数据类型使这种模糊性变得有些明显,其中有不确定的语句,如";列表数据结构的实现可以提供以下一些操作:";。
在许多语言中,有一种类型叫做list
和一种类型叫array
,它们有一些更好定义的含义。
这是一个非常概括的总结。
列表:
- 列表是线性的,它是元素的有序序列
- 您可以访问列表的第一个元素
- 您可以向列表中添加一个新元素
- 您可以从第一个元素开始一个接一个地访问列表中的所有元素。最后一个操作是用";"任意访问";(访问
l[0], l[1], l[2]
等元素(或用两个称为"0"的操作;头部;以及";尾部";,其中CCD_ 4返回CCD_ 5的第一个元素,CCD_
在我看来,四个元素的列表如下:
-> 3 -> 7 -> 12 -> 9
阵列:
- 一个数组提供";"任意访问";使用索引(访问作为
a[something]
的元素( - 有时索引被限制为0和数组长度之间的整数;有时索引可以是任何东西
- 您可以很容易地修改您访问的元素,但不一定要添加新元素
允许任何东西用作索引的数组在大多数语言中通常被称为map
或dict
,其中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>
的实现