2013-11-14 105 views
0

我正在处理简单的字符串散列表。我用相同的输入运行程序,在某些情况下,散列返回一个随机数。散列函数在同一输入上返回随机值

这里是我的代码:

LIST *table[1000]; 

void init() 
{ 
    for(i=0;i<1000;i++) //set table to NULL 
     table[i]=NULL; 
} 

int hash(char *array) //hash function   
    { 
     int hash=0; 
     hash=array[0]+strlen(array)+array[strlen(array-1)]; 
     hash=hash%1000; 
     printf("%d\n",hash); //print of hash    
     return hash; 
    } 

void add(char *arr) 
{ 
    char *str = (char *) malloc(sizeof(char) * strlen(arr)+1); // 
    strcpy(str,arr); 
    int h=0; 
    h=hash(str); 
    LIST *f=table[h]; 
    //...... rest of the code 
} 


int main() 
{ 
    init(); 
    add("/"); 
    add("+"); 
    add("-"); 
    return 0; 
} 

And output is: 
141 
137 
139 
After rerun output is: 
110 
106 
108 

有谁知道什么是错这个哈希函数?

回答

1

我猜想,strlen(array-1)是罪魁祸首。

您不知道,array - 1上的字符是什么,因此它有时可能会返回0。有时可能会返回strlen(array) + 1

因此,您将array[0]添加到散列值,有时您会在字符串array[strlen(array) + 1]之外添加一个字符。