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

@@ -26,54 +26,43 @@ 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 quadratic probing to resolve collisions
int quadraticProbe(int key, bool searching)
{
int quadraticProbe(int key, bool searching) {
int hash = static_cast<int>(fabs(hashFxn(key)));
int i = 0;
Entry entry;
do
{
do {
int index = std::round(fabs(
(hash + static_cast<int>(std::round(std::pow(i, 2)))) % 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;
}
if (!rehashing)
{
if (!rehashing) {
cout << "Spot taken, looking at next (next index = "
<< std::round(fabs((hash + static_cast<int>(std::round(
std::pow(i + 1, 2)))) %
@@ -82,8 +71,7 @@ int quadraticProbe(int key, bool searching)
}
i++;
}
if (i == totalSize * 100)
{
if (i == totalSize * 100) {
cout << "Quadratic probe failed (infinite loop)" << endl;
return notPresent;
}
@@ -92,26 +80,22 @@ int quadraticProbe(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;
}
// Helper
Entry find(int key)
{
Entry find(int key) {
int index = quadraticProbe(key, true);
if (index == notPresent)
return Entry();
@@ -119,20 +103,13 @@ Entry find(int key)
}
// 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 << " ";
@@ -142,8 +119,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;
@@ -151,10 +127,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);
}
@@ -165,25 +139,21 @@ void rehash()
}
// Checks for load factor here
void add(int key)
{
void add(int key) {
Entry* entry = new Entry();
entry->key = key;
int index = quadraticProbe(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 = quadraticProbe(key, true);
if (index == notPresent)
{
if (index == notPresent) {
cout << "key not found" << endl;
}
table[index].key = tomb;
@@ -192,8 +162,7 @@ void remove(int key)
}
// Information about the adding process
void addInfo(int key)
{
void addInfo(int key) {
cout << "Initial table: ";
display();
cout << endl;
@@ -206,8 +175,7 @@ void addInfo(int key)
}
// Information about removal process
void removalInfo(int key)
{
void removalInfo(int key) {
cout << "Initial table: ";
display();
cout << endl;
@@ -220,15 +188,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;
@@ -239,8 +205,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;
@@ -251,13 +216,11 @@ int main(void)
cin >> key;
removalInfo(key);
break;
case 3:
{
case 3: {
cout << "Enter key to search = ";
cin >> key;
Entry entry = table[quadraticProbe(key, true)];
if (entry.key == notPresent)
{
if (entry.key == notPresent) {
cout << "Key not present";
}
break;