#include <iostream>
using namespace std;
class LinearProbingHashTable {
private:
int* table;
int tableSize;
int count;
const int EMPTY = -1;
int hashFunction(int key) {
return key % tableSize;
}
public:
LinearProbingHashTable(int size) {
tableSize = size;
count = 0;
table = new int[tableSize];
for (int i = 0; i < tableSize; i++) {
table[i] = EMPTY;
}
}
~LinearProbingHashTable() {
delete[] table;
}
bool isFull() {
return count == tableSize;
}
bool insert(int key) {
if (isFull()) {
return false;
}
int h = hashFunction(key);
while (table[h] != EMPTY) {
h = (h + 1) % tableSize;
}
table[h] = key;
count++;
return true;
}
bool search(int key) {
int h = hashFunction(key);
int start = h;
while (true) {
if (table[h] == EMPTY) {
return false;
}
if (table[h] == key) {
return true;
}
h = (h + 1) % tableSize;
if (h == start) {
return false;
}
}
}
void print() {
for (int i = 0; i < tableSize; i++) {
cout << "[" << i << "] ";
if (table[i] == EMPTY) {
cout << "EMPTY";
} else {
cout << table[i];
}
cout << endl;
}
}
};
int main() {
LinearProbingHashTable table(11);
int keys[] = {55, 35, 66, 76, 59, 48, 84, 70};
for (int key : keys) {
table.insert(key);
}
table.print();
cout << endl;
cout << "Search 48: " << (table.search(48) ? "Found" : "Not Found") << endl;
cout << "Search 100: " << (table.search(100) ? "Found" : "Not Found") << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgTGluZWFyUHJvYmluZ0hhc2hUYWJsZSB7CnByaXZhdGU6CiAgICBpbnQqIHRhYmxlOwogICAgaW50IHRhYmxlU2l6ZTsKICAgIGludCBjb3VudDsKICAgIGNvbnN0IGludCBFTVBUWSA9IC0xOwoKICAgIGludCBoYXNoRnVuY3Rpb24oaW50IGtleSkgewogICAgICAgIHJldHVybiBrZXkgJSB0YWJsZVNpemU7CiAgICB9CgpwdWJsaWM6CiAgICBMaW5lYXJQcm9iaW5nSGFzaFRhYmxlKGludCBzaXplKSB7CiAgICAgICAgdGFibGVTaXplID0gc2l6ZTsKICAgICAgICBjb3VudCA9IDA7CiAgICAgICAgdGFibGUgPSBuZXcgaW50W3RhYmxlU2l6ZV07CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFibGVTaXplOyBpKyspIHsKICAgICAgICAgICAgdGFibGVbaV0gPSBFTVBUWTsKICAgICAgICB9CiAgICB9CgogICAgfkxpbmVhclByb2JpbmdIYXNoVGFibGUoKSB7CiAgICAgICAgZGVsZXRlW10gdGFibGU7CiAgICB9CgogICAgYm9vbCBpc0Z1bGwoKSB7CiAgICAgICAgcmV0dXJuIGNvdW50ID09IHRhYmxlU2l6ZTsKICAgIH0KCiAgICBib29sIGluc2VydChpbnQga2V5KSB7CiAgICAgICAgaWYgKGlzRnVsbCgpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGludCBoID0gaGFzaEZ1bmN0aW9uKGtleSk7CgogICAgICAgIHdoaWxlICh0YWJsZVtoXSAhPSBFTVBUWSkgewogICAgICAgICAgICBoID0gKGggKyAxKSAlIHRhYmxlU2l6ZTsKICAgICAgICB9CgogICAgICAgIHRhYmxlW2hdID0ga2V5OwogICAgICAgIGNvdW50Kys7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgYm9vbCBzZWFyY2goaW50IGtleSkgewogICAgICAgIGludCBoID0gaGFzaEZ1bmN0aW9uKGtleSk7CiAgICAgICAgaW50IHN0YXJ0ID0gaDsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgaWYgKHRhYmxlW2hdID09IEVNUFRZKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0YWJsZVtoXSA9PSBrZXkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBoID0gKGggKyAxKSAlIHRhYmxlU2l6ZTsKCiAgICAgICAgICAgIGlmIChoID09IHN0YXJ0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgdm9pZCBwcmludCgpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRhYmxlU2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGNvdXQgPDwgIlsiIDw8IGkgPDwgIl0gIjsKCiAgICAgICAgICAgIGlmICh0YWJsZVtpXSA9PSBFTVBUWSkgewogICAgICAgICAgICAgICAgY291dCA8PCAiRU1QVFkiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY291dCA8PCB0YWJsZVtpXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KfTsKCmludCBtYWluKCkgewogICAgTGluZWFyUHJvYmluZ0hhc2hUYWJsZSB0YWJsZSgxMSk7CgogICAgaW50IGtleXNbXSA9IHs1NSwgMzUsIDY2LCA3NiwgNTksIDQ4LCA4NCwgNzB9OwoKICAgIGZvciAoaW50IGtleSA6IGtleXMpIHsKICAgICAgICB0YWJsZS5pbnNlcnQoa2V5KTsKICAgIH0KCiAgICB0YWJsZS5wcmludCgpOwoKICAgIGNvdXQgPDwgZW5kbDsKCiAgICBjb3V0IDw8ICJTZWFyY2ggNDg6ICIgPDwgKHRhYmxlLnNlYXJjaCg0OCkgPyAiRm91bmQiIDogIk5vdCBGb3VuZCIpIDw8IGVuZGw7CiAgICBjb3V0IDw8ICJTZWFyY2ggMTAwOiAiIDw8ICh0YWJsZS5zZWFyY2goMTAwKSA/ICJGb3VuZCIgOiAiTm90IEZvdW5kIikgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==