const int DefaultSize = 100; template<typename E,typename K> class SkipNode{ E data; SkipNode<E,K> **link; SkipNode(int size=DefaultSize){ link = new SkipNode<E,K>*[size]; assert(link!=NULL); } };
template<typename E,typename K> class SkipList{ public: SkipList(K large,int maxLev=DefaultSize); ~SkipList(); bool Search(const K k1,E& e1)const; E& getData(SkipNode<E,K>* current){ if(current!=NULL) return ¤t->data; else return NULL; } bool Insert(const K k1,E& e1); bool Remove(const K k1,E& e1); private: int maxLevel;//所允许的最大级数 int Levels;//当前非空链的级数 K TailKey;//在TailKey中存有一个大值 SkipNode<E,K> *head;//附加头结点 SkipNode<E,K> *tail;//附加尾结点 SkipNode<E,K> **last;//指针数组 int level(); SkipNode<E,K> *SaveSearch(const K k1); };
template<typename E,typename K> SkipList<E,K>::SkipList(K large, int maxLev) { maxLevel = maxLev; TailKey = large; Levels = 0; head = new SkipNode<E,K>(maxLevel+1);//附加头结点,有maxLevel+1个指针 tail = new SkipNode<E,K>(0); last = new SkipNode<E,K> *[maxLevel+1]; tail->data = large; for(int i=0;i<=maxLevel;i++) head->link[i]=tail; }