私はチェーンアルゴリズムによってハッシュテーブルを実装するために以下のコードをプログラムし、私はmain
機能でそれを使用する場合、結果が間違っている:の後に、このクラスを実装間違った結果
#define _SIZE 1000
class HashEntry
{
public: int Tel;
string Name;
public: HashEntry(){}
public: HashEntry(int Tel, string Name)
{
this->Tel = Tel;
this->Name = Name;
}
};
class Link {
public:
HashEntry data;
Link *next;
public:
Link() : next(NULL){ }
};
void Insert (Link *head, HashEntry data)
{
Link *t= new Link;
t->data=data;
if(head==NULL)
{
head = new Link;
head->next = NULL;
head->data = data;
return;
}
Link *head2= head;
while(head2->next!=NULL)
{
if(head2->data.Name == data.Name)
return;
head2=head2->next;
}
head2->next=t;
}
class HashTable {
public:
Link **a;
public:
HashTable()
{
a = new Link *[_SIZE];
for (int i=0; i<_SIZE; i++)
a[i]=NULL;
}
public:
int HashFonction (string key)
{
int res=0;
for (int i = 0; i < key.length(); i ++)
{
char ch = key.at(i);
if(i%2==0)
res+=(int)ch;
else
res-=(int)ch;
}
return (int)fabsf((float)res) % _SIZE;
}
void HashInsert (string key, int val){
int index= HashFonction(key);
HashEntry s(val, key);
Insert(a[index],s);
}
int HashSearch(string key)
{
int inx=HashFonction(key);
Link *head=a[inx];
if(head==NULL){
return -1;
}
while(head!=NULL){
if(head->data.Name==key)
return head->data.Tel;
head=head->next;
}
return -1;
}
};
、私は、コードを次のようにプログラムしかし、検索の結果は-1: -/
HashTable ht;
ht.HashInsert("Hossein", 849348);
ht.HashInsert("Ali", 94343);
ht.HashInsert("Fatemeh", 940343);
cout << ht.HashSearch("Ali") << endl; // output = -1 :-/
誰が間違っているかを説明してもらえますか?
コードをデバッグして、どこでエラーが発生したかを特定してください。挿入段階で? [はいの場合 - どこに?]を検索しますか? [それはなぜ検索に失敗する?] – amit
私はそれがかなり正しいと思います! -/ –
あなたはデバッガを使うべきです[あなたのIDEにデバッガがない場合はprintfの束を使用してください]。そして、すべての挿入が正しく行われたかどうかを最初にチェックしてください。 *正確に*失敗した場所を調査してから、探しに行き、同じ方法で確認してください。 – amit