我正在學習哈希表,並在另一個網站上找到此代碼,但無法理解插入(int鍵,int值)函數。 該函數運行良好,但我想知道是否有額外的代碼是不需要的,或者如果我不完全理解它。試圖理解哈希表中的代碼在c + +
具體地說,在函數結束的其他條件:
else
{
entry->value = value;
}
它似乎沒有以往任何時候都達到這個條件,當我使用不同的參數調用該函數。這是其餘的代碼。
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstdio>
using namespace std;
const int TABLE_SIZE = 128;
class HashNode
{
public:
int key;
int value;
HashNode* next;
HashNode(int key, int value)
{
this->key = key;
this->value = value;
this->next = NULL;
}
};
class HashMap
{
private:
HashNode** htable;
public:
HashMap()
{
htable = new HashNode*[TABLE_SIZE];
for (int i = 0; i < TABLE_SIZE; i++)
htable[i] = NULL;
}
~HashMap()
{
for (int i = 0; i < TABLE_SIZE; ++i)
{
HashNode* entry = htable[i];
while (entry != NULL)
{
HashNode* prev = entry;
entry = entry->next;
delete prev;
}
}
delete[] htable;
}
/*
* Hash Function
*/
int HashFunc(int key)
{
return key % TABLE_SIZE;
}
/*
* Insert Element at a key
*/
void Insert(int key, int value)
{
int hash_val = HashFunc(key);
HashNode* prev = NULL;
HashNode* entry = htable[hash_val];
while (entry != NULL)
{
prev = entry;
entry = entry->next;
}
if (entry == NULL)
{
entry = new HashNode(key, value);
if (prev == NULL)
{
htable[hash_val] = entry;
}
else
{
prev->next = entry;
}
}
else
{
entry->value = value;
}
}
/* Search Element at a key
*/
int Search(int key)
{
bool flag = false;
int hash_val = HashFunc(key);
HashNode* entry = htable[hash_val];
while (entry != NULL)
{
if (entry->key == key)
{
cout << entry->value << " ";
flag = true;
}
entry = entry->next;
}
if (!flag)
return -1;
}
};
int main()
{
HashMap hash;
hash.Insert(3, 7);
hash.Search(3);
}
任何澄清高度讚賞。
謝謝
要做的第一件事是整理縮進。不好的縮進使得代碼變得非常難解釋。 – user4581301
現在,我們來看看吧... – user4581301
它只是一個冗餘的代碼,你可以看到,由於循環,條目保證爲空。如果散列和鍵匹配,你確實設置了值,但是在別的地方處理。 –