Advertisement
cyter

HashTable in C++

Jan 18th, 2019
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // primary structure
  2. struct foo
  3. {
  4.     Data  data;
  5.     foo*  next;
  6.     foo** prevNext;
  7. };
  8.    
  9. HashTable<foo> hash;
  10.  
  11. // insert  
  12. template <class T>
  13. void HashTable<T>::insert(T* x)
  14. {
  15.     int bucket  = hashFunc(x->data);
  16.     T** xPtr    = &elements_[bucket];
  17.     x->next     = *xPtr;
  18.     x->prevNext = xPtr;
  19.  
  20.     if (x->next)
  21.         x->next->prevNext = &x->next;
  22.  
  23.     *xPtr = x;
  24. }
  25.  
  26. // remove  
  27. template<class T>
  28. void HashTable<T>::remove(T* x)
  29. {
  30.     if (x->next)
  31.         x->next->prevNext = x->prevNext;
  32.  
  33.     *x->prevNext = x->next;
  34. }
  35.  
  36. // find
  37. template<class T>
  38. T* HashTable<T>::find(Data& data)
  39. {
  40.     int bucket = hashFunc(data);
  41.  
  42.     T* ptr = elements_[bucket];
  43.     while (ptr != 0)
  44.     {
  45.         if(ptr->data == data)
  46.             return ptr;
  47.         ptr = ptr->next;
  48.     }
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement