/*哈希函数的构造方法其实和建立邻接表的方法非常类似*/
#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;
}

 

posted on 2012-10-20 11:57  有间博客  阅读(371)  评论(0编辑  收藏  举报