单向链表是动态数组吗

Is A Singly Linked List a Dynamic Array

我试图在考试前更好地理解我的定义,其中一些问题将包含术语“动态数组”。因此,我害怕在这些情况下使用单向链表,因为它们提供了简单解释且节省时间的堆栈实现,但可能不被视为动态数组。

支持和反对单链表是动态数组的论点是什么?

据我了解,动态数组只是一个根据其中的元素分配一些动态数量 space 的数组。在这种情况下,链表的大小对应于其中的元素1:1;因此动态。

另一方面,我的老师使用过的例子以及我们教科书中的例子,动态数组是连续数组——或者更确切地说;数组被定义为连续序列。即 array[i] 是第 i 个元素,array[i+1] 是第 i+1 个元素(如果 f.ex 我们对数组排序)。但是单向链表的类似实现(键和 next 的两个数组)不遵循这种排序方案;因此不是数组。

因此我在笔记中得出以下结论;单向链表是动态的,但数组不是。因此不是动态数组。

我这个假设正确吗?你的论据是什么 for/against?

数组通常意味着可以直接寻址的连续内存。获取i-th元素的值,无论i是大还是小,数组大小是大还是小,都应该是常量。

在这个定义下,链表是动态的,但不是数组。

Is A Singly Linked List a Dynamic Array

不,数组(动态或非动态)允许在恒定时间内进行随机访问。对于链表,您必须遍历列表才能找到给定索引的值。

Arrays are defined as being contiguous sequences

这通常是这样解释的,但是当内存管理是一个黑盒子时,您可以认为数组不一定是连续的。这可以被认为是一个实现细节。例如,在 JavaScript 中,数组不能保证是连续的。重要的是数组提供了对给定索引处元素的直接访问,并且是在常数时间内进行的。

Singly linked lists are dynamic, but not arrays

这是正确的结论。