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

有谁知道这个哈希函数有什么问题?

4

1 回答 1

1

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

你不知道,这个角色array - 1是什么,所以它有时可能会返回0。有时它可能会返回strlen(array) + 1

结果,您添加array[0]到哈希值,有时您在字符串之外添加一个字符,array[strlen(array) + 1].

于 2013-11-14T20:17:03.693 回答