我试着在考试前更好地理解我的定义,其中一些问题将包含术语";动态数组"因此,我害怕在这些情况下使用单独的链表,因为它们提供了简单解释和节省时间的堆栈实现,但可能不被视为动态数组。
支持和反对将单链表作为动态数组的论点是什么?
据我所知,动态数组只是一个根据其中的元素分配一些动态空间的数组。在这种情况下,链表的大小与其中的元素1:1对应;因此是动态的。
另一方面,我的老师在我们的教科书中使用的例子是,动态数组是连续的数组——或者更确切地说;数组被定义为连续序列。I.e array[I]是第I个元素,array[I+1]是第I+1个元素(如果f.ex,我们对数组进行排序(。但是单链表的可比较实现(键和next的两个数组(并不遵循这种排序方案;因此不是数组。
因此,我在笔记中得出以下结论;单链表是动态的,但不是数组。因此不是动态数组。
我的这个假设正确吗?你支持/反对什么?
一个单链表是一个动态数组吗
否,数组(动态或非动态(允许在恒定时间内进行随机访问。对于链表,您必须遍历列表才能找到给定索引的值。
数组被定义为连续序列
通常是这样解释的,但当内存管理是一个黑盒时,您可以认为数组不一定是连续的。这可以被视为一个实施细节。例如,在JavaScript中,数组不能保证是连续的。重要的是,数组提供了对给定索引处的元素的直接访问,并且是在恒定时间内访问的。
单链表是动态的,但不是数组
这是正确的结论。
数组通常意味着可以直接寻址的连续内存。无论i
是大还是小以及数组的大小是大还是小时,获取i-th
元素的值都应该是恒定的。
根据此定义,链表是动态的,但不是数组。