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

问题描述

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

解决方法

将“数组”和“列表”作为抽象数据类型而不涉及任何特定实现可能会引起一些混淆,因为这两种定义不是很好。

两个Wikipedia页面List (abstract data type)Array data type使得这种歧义有些明显,带有不确定的陈述,例如“列表数据结构的实现可能提供了以下某些操作” :“。

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

这是一个非常笼统的摘要。

列表:

  • 一个列表是线性的,它是元素的有序序列;
  • 您可以访问列表的第一个元素;
  • 您可以向列表中添加新元素;
  • 您可以从第一个元素开始一个接一个地访问列表的所有元素。 最后一个操作是通过“任意访问”(访问元素为l[0],l[1],l[2]等)或两个名为“ head”和“ tail”的操作完成的,其中head(l)返回{{ 1}}和l返回通过丢弃第一个元素而获得的子列表。

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

tail(l)

数组:

  • 一个数组使用索引提供“任意访问”(访问元素为-> 3 -> 7 -> 12 -> 9 );
  • 有时索引被限制为0到数组长度之间的整数;有时索引可以是任何东西;
  • 您可以轻松地修改要访问的元素,但是不必添加新元素。

在大多数语言中,通常将允许任何内容用作索引的数组称为a[something]map,其中dict严格是指由整数索引的线性结构;但是在某些语言中(例如PHP),它仍然称为数组。

在我看来,由四个元素组成的数组如下所示:

array

故事:

  • 线性,有序的元素序列;
  • 通常可以包含不同类型的元素,而在大多数语言中,列表中的所有元素必须具有相同的类型;
  • 通常无法添加/删除元素
  • 在强类型语言(例如Haskell或OCaml)中,元组的类型由其长度和其中使用的类型的枚举给出,例如,元组+--+--+--+--+ | 0| 1| 2| 3| +--+--+--+--+ | 3| 7|12| 9| +--+--+--+--+ 的类型为{{1} },并且返回特定类型元组的函数不能突然返回其他类型的元组。

强类型语言中的字符串有时类似于数学中的笛卡尔乘积,也称为“产品类型”,在C语言中非常类似于(3,7,12.0,"9")。弱类型语言中的元组非常接近列表。

,

是的,你是对的。

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

列表是动态数组,可以添加所需数量的项目。引擎盖下的阵列在某些语言中用于列表,例如在C#中。当添加新项目并且数组已满时,将以两倍大小创建新数组。

You can see the implementation of List<T>C#