내가 체인 알고리즘에 의해 해시를 구현하는 아래의 코드를 프로그램,하지만 난 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