良好的数据结构来保存列表

Good data structure to hold a list

我需要一个包含有序列表的数据结构。我需要有一个插入,一个删除操作,以及一个getPosition操作。

getPosition 操作经常在连续元素上调用,例如我有列表:

[a0, a1, …, ak, ak', …, an]

我经常需要获取 ak 的索引,然后是 ak' 的索引。

我在想一个类似于splay树的算法,但它也会移动被访问元素的邻居可能是有效的,但我找不到任何参考。你有什么建议吗?

编辑: 我还需要快速插入+删除。 O(log(n)) 中的东西就足够了。

一个解决方案,但不是很好:

由于 getPosition 操作被调用 "frequently",我认为您的节​​点应该如下所示:

struct node {
    int key;
    int index;
    node *next;
    node *last;
}

并且每次添加或删除节点时,您都​​会 运行 遍历列表的其余部分并更新索引。

更好的解决方案:

您可以使用一个树结构,其中所有节点都保存在叶节点中,每个根保存其下的叶数。 InsertDeletegetPostion 应该是 O(log n)

Skip List 怎么样?这应该允许您保持有序列表并为您提供 O(log n) 的插入、删除和搜索性能(平均)。

在优化搜索元素 k+1 方面,也许只是缓存最后搜索的索引并从那里开始搜索。