如何构造字符串哈希函数?

 

/* 哈希函数的构造方法其实和建立邻接表的方法非常类似 */
#include<stdio.h>
#include< string.h>
#include<stdlib.h>
char st[ 121000][ 30], temp[ 30];
int first[ 10000019], next[ 121000];


void init()
{
    memset(first, - 1sizeof(first));
}

int hash( char *key)  // ELHhash
{
    UL h =  0;
     while(*key)
    {
        h = (h<< 4) + *key++;
        UL g = h &  0xf0000000L;
         if(g) h ^= g>> 24;
        h &= ~g;
    }
     return h%MAXN;
}



void insert( int s)  // 插入 
{
     int h = hash(st[s]);
    next[s] = first[h];
    first[h] = s;
}

int search( char *str)  // 链表查询
{
     int h = hash(str);
     for( int v = firts[h]; v != - 1; v = next[v])
    {
         if(strcmp(str, st[v]) ==  0return  0;
    }
     return  1;
}

 

你可能感兴趣的:(字符串)