radko93

skiplist

Mar 20th, 2013
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.96 KB | None | 0 0
  1. package L2;
  2.  
  3. import java.util.Random;
  4.  
  5. public class SkipList<Object extends Comparable<Object>, U>
  6. {
  7.     private Element _head;
  8.     private Random _random;
  9.     private long _size;
  10.     private double _p;
  11.    
  12.     private class Element
  13.     {
  14.         public Object key;
  15.         public Object value;
  16.         public long level;
  17.         public Element next;
  18.         public Element down;
  19.        
  20.         public Element(Object key, Object value, long level, Element next, Element down)
  21.         {
  22.             this.key = key;
  23.             this.value = value;
  24.             this.level = level;
  25.             this.next = next;
  26.             this.down = down;
  27.         }
  28.     }
  29.    
  30.    
  31.    
  32.     private long generujlevel()
  33.     {
  34.         long level = 0;
  35.         while (level <= _size && _random.nextDouble() < _p) {
  36.             level++;
  37.         }
  38.        
  39.         return level;
  40.     }
  41.     //konstrukor ustawiajacy nasza liste jako pusta
  42.     public SkipList()
  43.     {
  44.        
  45.         _head = new Element(null, null, 0, null, null);
  46.         _random = new Random();
  47.         _size = 0;
  48.         _p = 0.5;
  49.     }
  50.    
  51.     public void add(Object key, Object value)
  52.     {
  53.         long level = generujlevel();
  54.         if (level > _head.level) {
  55.             _head = new Element(null, null, level, null, _head);
  56.         }
  57.        
  58.         Element cur = _head;
  59.         Element last = null;
  60.        
  61.         while (cur != null) {
  62.             if (cur.next == null || cur.next.key.compareTo(key) > 0) {
  63.                 if (level >= cur.level) {
  64.                     Element n = new Element(key, value, cur.level, cur.next, null);
  65.                     if (last != null) {
  66.                         last.down = n;
  67.                     }
  68.                    
  69.                     cur.next = n;
  70.                     last = n;
  71.                 }
  72.                
  73.                 cur = cur.down;
  74.                 continue;
  75.                 //jak juz mamy dany element to go nadpisujemy
  76.             } else if (cur.next.key.equals(key)) {
  77.                 cur.next.value = value;
  78.                 return;
  79.             }
  80.            
  81.             cur = cur.next;
  82.         }
  83.        
  84.         _size++;
  85.     }
  86.    
  87.    
  88.    
  89.    
  90.    
  91.     public Object get(Object key)
  92.     {
  93.         Element cur = _head;
  94.         while (cur != null) {
  95.             if (cur.next == null || cur.next.key.compareTo(key) > 0) {
  96.                 cur = cur.down;
  97.                 continue;
  98.             } else if (cur.next.key.equals(key)) {
  99.                 return cur.next.value;
  100.             }
  101.            
  102.             cur = cur.next;
  103.         }
  104.        
  105.         return null;
  106.     }
  107. }
Advertisement
Add Comment
Please, Sign In to add comment