C ++中的可索引跳过列表实现

时间:2013-01-17 13:40:00

标签: c++ data-structures skip-lists

到目前为止,我找到的所有跳过列表实现都使用键并将它们与值相关联。 但我需要的是跳过列表,我可以在索引位置i插入一个值,以便在此之后的所有值 索引i可以用索引加1查询。

这里有一个澄清的例子:

//pseudocode
//let skipList sk be a list of ints, containing 5 elements.

//insert 6 at index 3
sk.insert(3, 6);

//insert 5 at index 3
sk.insert(3, 5);

//get index 4
int value = sk.get(4);

现在value应该是6,因为5是在索引3插入的,所以值6移动了一个索引。

可以使用跳过列表构建这样的数据结构,请参阅 可索引的跳过列表: http://en.wikipedia.org/wiki/Skip_list

但我找不到实施方案。具有这样的数据结构是非常有用的,例如在大型列表中有许多随机插入和访问的情况下。

2 个答案:

答案 0 :(得分:1)

在您发布的维基百科页面中似乎有一个指向实施的链接: http://code.activestate.com/recipes/576930/

虽然是python。

或者,采用现有的C ++实现并向其添加链接宽度并实现索引查找。

答案 1 :(得分:0)

我在C#中实现了一个skiplist类,它有一个返回集合中第k个最大值的方法。它完全符合您的get方法所需。

但是,插入方法没有指定位置,因为它始终对列表进行排序,因此位置由现有值中的查找确定。

查看https://github.com/htoma/algorithms/blob/master/Algorithms/Algorithms/Sources/SkipLists/SkipList.cs,方法FindKLargestElement