Mahmoud_Hawara

Hash Table (Linear Probing)

Nov 28th, 2025
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.33 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4.  
  5. class HashTable {
  6. private:
  7.    
  8.     const float LOAD_FACTOR_LIMIT = 0.5;
  9.    
  10.     vector<pair<int, int>> table;
  11.     vector<int> state;
  12.     int tableSize, numberOfElements;
  13.  
  14.     int Hash(int key) {
  15.         return key % tableSize;
  16.     }
  17.  
  18.     void rehash() {
  19.         tableSize *= 2;
  20.         vector<pair<int, int>> newTable(tableSize);
  21.         vector<int> newState(tableSize);
  22.         for (int i = 0; i < tableSize / 2; i++) {
  23.             if (state[i] == 1) {
  24.                 int idx = Hash(table[i].first);
  25.                 while (newState[idx] == 1) {
  26.                     idx = (idx + 1) % tableSize;
  27.                 }
  28.                 newTable[idx] = table[i];
  29.                 newState[idx] = 1;
  30.             }
  31.         }
  32.         table = newTable;
  33.         state = newState;
  34.     }
  35.  
  36.     void update(int key, int val) {
  37.         int idx = Hash(key);
  38.         for (int i = 0; i < tableSize && state[idx] != 0; i++) {
  39.             if (state[idx] == 1 && table[idx].first == key) {
  40.                 table[idx].second = val;
  41.                 return;
  42.             }
  43.             idx = (idx + 1) % tableSize;
  44.         }
  45.     }
  46.  
  47. public:
  48.     HashTable() {
  49.         tableSize = 8;
  50.         table.resize(tableSize);
  51.         state.resize(tableSize);
  52.         numberOfElements = 0;
  53.     }
  54.  
  55.     void insert(int key, int value) {
  56.         if (get(key)) {
  57.             update(key, value);
  58.             return;
  59.         }
  60.         float currentLoadFactor = 1.0 * numberOfElements / tableSize;
  61.         if (currentLoadFactor >= LOAD_FACTOR_LIMIT) rehash();
  62.         int idx = Hash(key);
  63.         while (state[idx] == 1) {
  64.             idx = (idx + 1) % tableSize;
  65.         }
  66.         table[idx] = {key, value};
  67.         state[idx] = 1;
  68.         numberOfElements++;
  69.     }
  70.  
  71.     int get(int key) {
  72.         int idx = Hash(key);
  73.         for (int i = 0; i < tableSize && state[idx] != 0; i++) {
  74.             if (state[idx] == 1 && table[idx].first == key) {
  75.                 return table[idx].second;
  76.             }
  77.             idx = (idx + 1) % tableSize;
  78.         }
  79.         return 0;
  80.     }
  81.  
  82.     void addOne(int key) {
  83.         insert(key, get(key) + 1);
  84.     }
  85.  
  86.     void remove(int key) {
  87.         int idx = Hash(key);
  88.         for (int i = 0; i < tableSize && state[idx] != 0; i++) {
  89.             if (state[idx] == 1 && table[idx].first == key) {
  90.                 state[idx] = -1;
  91.                 numberOfElements--;
  92.                 return;
  93.             }
  94.             idx = (idx + 1) % tableSize;
  95.         }
  96.     }
  97.  
  98.     int size() {
  99.         return numberOfElements;
  100.     }
  101.  
  102.     bool empty() {
  103.         return numberOfElements == 0;
  104.     }
  105.  
  106.     void print() {
  107.         for (int i = 0; i < tableSize; i++) {
  108.             if (state[i] == 1) cout << "(" << table[i].first << ", " << table[i].second << ") ";
  109.             else if (state[i] == 0) cout << "NOT_USED ";
  110.             else cout << "DELETED ";
  111.         }
  112.     }
  113. };
  114.  
  115. int main()
  116. {
  117.     HashTable h;
  118.     h.insert(1, 1);
  119.     h.insert(2, 2);
  120.     h.insert(3, 3);
  121.     h.insert(4, 4);
  122.     h.insert(5, 4);
  123.     h.insert(101, 4);
  124.     h.insert(100, 4);
  125.  
  126.     h.insert(110, 4);
  127.  
  128.     h.insert(110, 5);
  129.     h.addOne(110);
  130.     h.remove(110);
  131.     h.remove(101);
  132.     h.remove(100);
  133.  
  134.     h.insert(100, 5);
  135.  
  136.  
  137.  
  138.     h.print();
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment