বেসিক হ্যাশ টেবিল (লিনিয়ার প্রোবিং)
এই বাস্তবায়নে একটি ফিক্সড সাইজ অ্যারে ব্যবহার করা হয়েছে যেখানে কলিশন হলে লিনিয়ার প্রোবিং (next index চেক করা) করা হয়। চেইনিং নেই।
অ্যালগরিদম
HashFunc(k) = k % T_S
Insert: h = HashFunc(k); while (t[h] != NULL AND t[h]->k != k) h = HashFunc(h+1); t[h] = new Entry(k,v)
Search: h = HashFunc(k); while (t[h] != NULL AND t[h]->k != k) h = HashFunc(h+1); return t[h] ? t[h]->v : -1
Remove: h = HashFunc(k); while (t[h] != NULL) if (t[h]->k == k) break; else h = HashFunc(h+1); if found delete t[h]
উদাহরণ কোড
#include <iostream>
#include <cstdlib>
using namespace std;
const int T_S = 200;
class HashTableEntry {
public:
int k, v;
HashTableEntry(int k, int v) : k(k), v(v) {}
};
class HashMapTable {
HashTableEntry **t;
public:
HashMapTable() { t = new HashTableEntry*[T_S]; fill(t, t+T_S, nullptr); }
int HashFunc(int k) { return k % T_S; }
void Insert(int k, int v) { /* ... লিনিয়ার প্রোবিং ইনসার্ট ... */ }
int SearchKey(int k) { /* ... সার্চ ... */ }
void Remove(int k) { /* ... ডিলিট ... */ }
~HashMapTable() { for (int i=0;i<T_S;i++) if(t[i]) delete t[i]; delete[] t; }
};
int main() { /* ... মেনু ড্রাইভেন ... */ }
আউটপুট নমুনা
Element at key 6 : 7 Element Deleted
সীমাবদ্ধতা: টেবিল ফুল হলে ইনসার্ট কাজ করবে না (রিহ্যাশিং নেই)।