关于跳跃表

//跳跃表的插入操作

template<class Key,class Elem,class KEComp,class EEComp>
bool SkipList<Key,Elem,KEComp,EEComp>::
insert(const Elem& val) {
 int i;
 SkipNode<Elem> *x= head;   //从头结点开始
 int newLevel = randomLevel();   //选择一个新级数
 if(newLevel>level) {           //如果是最深的一级
  AdjustHead(newLevel);   //往头结点加入空指针,表示新增一级
  level = newLevel;     更新头结点的级数
 }
 SkipNode<Elem>* update[level+1];   //声明一个数组,存放0到level共level+1个结点,该数组存放每一级到达的最远结点
 for(i=level;i>=0;i--) {
  while((x->forward[i]!=null)&&EEComp::lt(x->forward[i]->value,val))
   x = x->forward[i];
  update[i] = x;  //当走到终点前,更新update[i]的值
 }
 x = new SkipNode<Elem> (val,newLevel);   //生成要插入的新结点
 for(i=0;i<=newLevel;i++) {
  x->forward[i] = update[i]->forward[i];    //将新结点的下一个位置指针设定为原本最远结点的下一个位置
  update[i]->forward[i] = x;               //将原本最远结点的下一位置设为x
 }
 reccount++;
}

你可能感兴趣的:(null,Class,insert)