基于数组的链表:如何取消删除?

时间:2019-03-08 17:32:35

标签: arrays data-structures linked-list amortization

假设我们使用数组实现一个链表。假设每个元素都由一个键和下一项的索引组成。

如果我没记错的话,现在插入和删除将分摊O(1)。如果数组已满或太空,我们需要分配一个新的两倍或一半的大小。

我们可以使用Resizable Arrays in Optimal Time and Space中指定的可调整大小的数组来取消插入。简而言之,不是一个巨大的数组,而是一个较小的数组,随着数据集的增长,较小的数组逐渐转换为较大的数组。每次操作的运行时间都有很整齐的边界。

但是现在,我们如何取消删除?

据我所知:我们可以维护一个“自由列表”。除了常规的“ head”索引,我们还将跟踪第一个空闲索引,该索引又指向下一个空闲索引,依此类推。基本上,该结构由两个混合的链接列表组成,即数据列表和空闲列表。

但是,在进行大量删除之后,我们可能会坐在一个充满“漏洞”的数组上。对于大型数据集,一次将整个内容重建为一半大小可能不可行。

我们可以取消删除吗?

0 个答案:

没有答案