Infinity / -infinity用于未知类型的跳过列表插入?

时间:2016-10-08 21:55:22

标签: insert max default min skip-lists

我正在实施一个跳过列表,如:

template<typename Key, typename Value> class SkipList {...}

在网上看到的解释中,跳过列表的头部和尾部都有无限/负无穷大键,但它们都与数字键一起使用。

我可以假设<==运算符可用于键,因此我不必担心string < string

但是,如何找到最小/最大类型的值作为头/尾指针?是否有类似INT_MAXINT_MIN但适用于任何类型的内容?

1 个答案:

答案 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的原因。但我不认为这是解决问题的最佳方法,这正是我的目标。