集合

集合里的元素类型不一定相同。
你可以将商品看作一个集合,也可以将整个商店看作一个集合,这个商店中有人或者其他物品也没有关系。

集合里的元素没有顺序。
我们不会这样讲:我想要集合中的第三个元素,因为集合是没有顺序的。

事实上,这样的集合并不直接存在于编程语言中。然而,实际编程语言中的很多数据结构,就是在集合的基础上添加了一些规则形成的。

线性表

列表(又称线性列表)的定义为:是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。

列表的概念是在集合的特征上形成的,它具有顺序,且长度是可变的。你可以把它看作一张购物清单:
image.png
在这张清单中:

  • 购物清单中的条目代表的类型可能不同,但是按照一定顺序进行了排列;
  • 购物清单的长度是可变的,你可以向购物清单中增加、删除条目。

在编程语言中,列表最常见的表现形式有数组和链表,而我们熟悉的栈和队列则是两种特殊类型的列表。除此之外,向列表中添加、删除元素的具体实现方式会根据编程语言的不同而有所区分。

数组

数组是列表的实现方式之一。它具有列表的特征,同时也具有自己的一些特征。
然而,在具体的编程语言中,数组这个数据结构的实现方式具有一定差别。
比如 C++ 和 Java 中,数组中的元素类型必须保持一致,而 Python 中则可以不同。Python 中的数组叫做 list,具有更多的高级功能。
集合vs线性表(列表)vs数组 - 图2
列表和数组的不同点

  • 数组有索引,列表没有索引。
  • 数组中元素相邻,列表则不一定。