我正在实施一个跳过列表,如:
template<typename Key, typename Value> class SkipList {...}
在网上看到的解释中,跳过列表的头部和尾部都有无限/负无穷大键,但它们都与数字键一起使用。
我可以假设<
和==
运算符可用于键,因此我不必担心string < string
但是,如何找到最小/最大类型的值作为头/尾指针?是否有类似INT_MAX
或INT_MIN
但适用于任何类型的内容?
答案 0 :(得分:1)
您可以使用两个属性private SkipListItem<K, E> negInfinity;
和private SkipListItem<K, E> posInfinity;
,稍后将SkipListItem与它们进行比较。
以下是我的观点:
private SkipListItem<K, E> negInfinity;
private SkipListItem<K, E> posInfinity;
public SkipListDictionary(K[] keys, E[] elements) {
this.randomGenerator = new Random();
this.negInfinity = new SkipListItem<K, E>();
this.posInfinity = new SkipListItem<K, E>();
this.constructSkipList(keys, elements);
}
然后......:
private SkipListItem<K, E> searchKey(K key) {
SkipListItem<K, E> currentElement = this.lastListStart;
while(currentElement.lower != null) {
currentElement = currentElement.lower;
while(currentElement.next != null && currentElement.next.getItem() != posInfinity &&
currentElement.next.getKey().compareTo(key) < 1) {
currentElement = currentElement.next;
}
}
return currentElement;
}
P.S。:我使用属性referenceItem
为较高的列表引用较低的SkipListItem
以便于构建,这就是为什么有getItem
返回SkipListItem
的原因。但我不认为这是解决问题的最佳方法,这正是我的目标。