• SkipList


    SkipList

    1、插入操作。

      由于跳表数据结构整体上是有序的,所以在插入时,需要首先查找到合适的位置,然后就是修改指针(和链表中操作类似),然后更新跳表的level变量。

      

      

    boolean insert(l,key,value) 
        register list l;
        register keyType key;
        register valueType value;
    {
      register int k;
      // 使用了update数组
      node update[MaxNumberOfLevels];
      register node p,q;
      p = l->header;
      k = l->level;
      /*******************1步*********************/
      do {
            // 查找插入位置
            while (q = p->forward[k], q->key < key)
                p = q;
            
            // 设置update数组
            update[k] = p;
        } while(--k>=0);    // 对于每一层进行遍历
        
        // 这里已经查找到了合适的位置,并且update数组已经
        // 填充好了元素
       if (q->key == key)
       {
         q->value = value;
         return(false);
       };
        
       // 随机生成一个层数
       k = randomLevel();  
      if (k>l->level) 
      {
          // 如果新生成的层数比跳表的层数大的话
        // 增加整个跳表的层数
        k = ++l->level;
        // 在update数组中将新添加的层指向l->header
        update[k] = l->header;
      };
            
      /*******************2步*********************/
      // 生成层数个节点数目
      q = newNodeOfLevel(k);
      q->key = key;
      q->value = value;
          
      // 更新两个指针域
      do 
      {
            p = update[k];
            q->forward[k] = p->forward[k];
            p->forward[k] = q;
        } while(--k>=0);
        
        // 如果程序运行到这里,程序已经插入了该节点
      return(true);
    } 

     2、删除某个节点。

      和插入是相同的,首先查找需要删除的节点,如果找到了该节点的话,那么只需要更新指针域,如果跳表的level需要更新的话,进行更新。

      

    参考:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html

  • 相关阅读:
    JavaScript通过HTML的class来获取HTML元素的方法总结
    HTML5之FileReader接口读取文件
    简单好用用js就可以保存文本文件到本地
    JS获取节点的兄弟,父级,子级元素的方法
    删除window里面删除不掉的文件
    《软件过程改进》练习题
    软件过程改进2016下半年真题及答案
    jquery
    JSP入门
    JAVA方法
  • 原文地址:https://www.cnblogs.com/tekkaman/p/4877564.html
Copyright © 2020-2023  润新知