/*哈希函数的构造方法其实和建立邻接表的方法非常类似*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char st[121000][30], temp[30];
int first[10000019], next[121000];
void init()
{
memset(first, -1, sizeof(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]) == 0) return 0;
}
return 1;
}
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char st[121000][30], temp[30];
int first[10000019], next[121000];
void init()
{
memset(first, -1, sizeof(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]) == 0) return 0;
}
return 1;
}