在具有动态数组的语言中,链表是否有任何值,例如Python(当然,它具有列表数据结构)?
我目前认为python中的列表实际上只是一个静态数组,当插入更多数据时,它会将自己重新定义为一个新数组(大小更大),将数据从旧数组复制到新数组(从而使其成为动态数组)。这是正确的吗?
我也理解列表和链表如何以不同的方式在内存中存储数据(以连续方式列出列表和以非连续方式列出链表),但这是否提供了任何主要优势?
是的。从链表中删除链接是O(1),而对于动态数组,它是线性的。
假设您想要为LRU构建一个数据结构。通常,您会有一个用于"触摸"操作的哈希表,再加上一个序列数组来查看老化的内容。当一个项目被访问时,哈希表会在序列中找到它,并将其移动到末尾。如果一个项目需要收回,那么序列中的第一个项目将用于在哈希表中查找该项目,然后将其删除。
在本例中,使用链表进行序列操作意味着一切都在(预期)O(1)时间内工作。有了动态矢量,一切都将是线性的。链表仍然有其用途。