formatting source-code for 153fb7b8a5

This commit is contained in:
github-actions
2020-05-30 04:02:09 +00:00
parent 92fe9495ec
commit 8a2de9842b
175 changed files with 1671 additions and 3460 deletions

View File

@@ -25,47 +25,37 @@ int size;
bool rehashing;
// Node that holds key
struct Entry
{
struct Entry {
explicit Entry(int key = notPresent) : key(key) {}
int key;
};
// Hash a key
int hashFxn(int key)
{
int hashFxn(int key) {
std::hash<int> hash;
return hash(key);
}
// Performs linear probing to resolve collisions
int linearProbe(int key, bool searching)
{
int linearProbe(int key, bool searching) {
int hash = static_cast<int>(fabs(hashFxn(key)));
int i = 0;
Entry entry;
do
{
do {
int index = static_cast<int>(fabs((hash + i) % totalSize));
entry = table[index];
if (searching)
{
if (entry.key == notPresent)
{
if (searching) {
if (entry.key == notPresent) {
return notPresent;
}
if (searchingProber(entry, key))
{
if (searchingProber(entry, key)) {
cout << "Found key!" << endl;
return index;
}
cout << "Found tombstone or equal hash, checking next" << endl;
i++;
}
else
{
if (putProber(entry, key))
{
} else {
if (putProber(entry, key)) {
if (!rehashing)
cout << "Spot found!" << endl;
return index;
@@ -74,8 +64,7 @@ int linearProbe(int key, bool searching)
cout << "Spot taken, looking at next" << endl;
i++;
}
if (i == totalSize)
{
if (i == totalSize) {
cout << "Linear probe failed" << endl;
return notPresent;
}
@@ -84,38 +73,28 @@ int linearProbe(int key, bool searching)
}
// Finds empty spot
bool putProber(Entry entry, int key)
{
if (entry.key == notPresent || entry.key == tomb)
{
bool putProber(Entry entry, int key) {
if (entry.key == notPresent || entry.key == tomb) {
return true;
}
return false;
}
// Looks for a matching key
bool searchingProber(Entry entry, int key)
{
bool searchingProber(Entry entry, int key) {
if (entry.key == key)
return true;
return false;
}
// Displays the table
void display()
{
for (int i = 0; i < totalSize; i++)
{
if (table[i].key == notPresent)
{
void display() {
for (int i = 0; i < totalSize; i++) {
if (table[i].key == notPresent) {
cout << " Empty ";
}
else if (table[i].key == tomb)
{
} else if (table[i].key == tomb) {
cout << " Tomb ";
}
else
{
} else {
cout << " ";
cout << table[i].key;
cout << " ";
@@ -125,8 +104,7 @@ void display()
}
// Rehashes the table into a bigger table
void rehash()
{
void rehash() {
// Necessary so wall of add info isn't printed all at once
rehashing = true;
int oldSize = totalSize;
@@ -134,10 +112,8 @@ void rehash()
// Really this should use the next prime number greater than totalSize * 2
table = new Entry[totalSize * 2];
totalSize *= 2;
for (int i = 0; i < oldSize; i++)
{
if (oldTable[i].key != -1 && oldTable[i].key != notPresent)
{
for (int i = 0; i < oldSize; i++) {
if (oldTable[i].key != -1 && oldTable[i].key != notPresent) {
size--; // Size stays the same (add increments size)
add(oldTable[i].key);
}
@@ -148,25 +124,21 @@ void rehash()
}
// Adds entry using linear probing. Checks for load factor here
void add(int key)
{
void add(int key) {
Entry* entry = new Entry();
entry->key = key;
int index = linearProbe(key, false);
table[index] = *entry;
// Load factor greater than 0.5 causes resizing
if (++size / static_cast<double>(totalSize) >= 0.5)
{
if (++size / static_cast<double>(totalSize) >= 0.5) {
rehash();
}
}
// Removes key. Leaves tombstone upon removal.
void remove(int key)
{
void remove(int key) {
int index = linearProbe(key, true);
if (index == notPresent)
{
if (index == notPresent) {
cout << "key not found" << endl;
}
cout << "Removal Successful, leaving tomb" << endl;
@@ -175,8 +147,7 @@ void remove(int key)
}
// Information about the adding process
void addInfo(int key)
{
void addInfo(int key) {
cout << "Initial table: ";
display();
cout << endl;
@@ -189,8 +160,7 @@ void addInfo(int key)
}
// Information about removal process
void removalInfo(int key)
{
void removalInfo(int key) {
cout << "Initial table: ";
display();
cout << endl;
@@ -203,15 +173,13 @@ void removalInfo(int key)
}
// I/O
int main(void)
{
int main(void) {
int cmd, hash, key;
cout << "Enter the initial size of Hash Table. = ";
cin >> totalSize;
table = new Entry[totalSize];
bool loop = true;
while (loop)
{
while (loop) {
system("pause");
cout << endl;
cout << "PLEASE CHOOSE -" << endl;
@@ -222,8 +190,7 @@ int main(void)
cout << "5. Display Hash table." << endl;
cout << "6. Exit." << endl;
cin >> cmd;
switch (cmd)
{
switch (cmd) {
case 1:
cout << "Enter key to add = ";
cin >> key;
@@ -234,13 +201,11 @@ int main(void)
cin >> key;
removalInfo(key);
break;
case 3:
{
case 3: {
cout << "Enter key to search = ";
cin >> key;
Entry entry = table[linearProbe(key, true)];
if (entry.key == notPresent)
{
if (entry.key == notPresent) {
cout << "Key not present";
}
break;