【发布时间】:2019-12-28 22:04:02
【问题描述】:
我正在阅读一本关于数据结构和基本算法的书,以更好地掌握编程。我正在阅读的书定义了一些数据结构,例如列表、数组等,并指定它们的接口,以及如何使用不同语言的现有数据结构来实现(或构造)它们。例如,它讨论了如何将列表构造为数组或链接单元格。
然而,当我开始研究不同语言的这些数据类型时,我发现它们并不总是遵循书中定义的接口。
例如,这本书说,在一个列表中,您应该能够一次遍历不同的元素,仅从一端开始。例如,如果我想要第三个元素,我必须从第一个元素开始并使用“下一个”操作,直到找到我想要的元素。但是 Python 中的列表具有整数索引,我可以使用相应的索引直接访问任何元素。在本书中,索引类型只需为具有相等比较操作的有序类型。 (我认为这本书试图通过抽象事物来保持一般性)。
这是否意味着 Python 的列表不是“真正意义上的”列表?还是书中定义的数据结构只是对这些接口的外观的建议,实际上可能会有很多变化?
我知道这本书的想法是为了更好地理解如何思考数据结构,并介绍一些典型的,所以我倾向于认为后一个答案是正确的。
【问题讨论】:
-
Python 列表比链表更接近具有自动调整大小机制的数组。正如所教授的那样,数据结构是创建许多变体和扩展的基础
-
好的,所以列表(或者可能是链表)的定义很笼统,然后有一些变化?我想我可能选择了一个不好的例子,因为我似乎被这个名字误导了。虽然我见过一些调用通常的 Python 列表(例如
[1, 2, 'hat'])数组。但是,这也不符合本书对数组的定义,因为它们应该是静态的。我认为您的评论以及@Gelineau 的回复回答了我的问题。 -
将 Python 列表视为对数组的抽象。当您定义一个列表时,解释器实际上会创建一个指向 Python 对象的指针数组并允许您执行基于索引的查找,抽象会维护列表的当前长度,当它增长到大于最初分配的数组时,它会重新分配数组以适应任何未来的增长