到目前为止,我找到的所有跳过列表实现都使用键并将它们与值相关联。 但我需要的是跳过列表,我可以在索引位置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
但我找不到实施方案。具有这样的数据结构是非常有用的,例如在大型列表中有许多随机插入和访问的情况下。
答案 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