首页 > 代码库 > 哈希表
哈希表
#define TABLE_SIZE 200003
struct Node
{
char key[12], value[12];
bool flag;
Node () { flag = false; }
} table[TABLE_SIZE];
unsigned int BKDRHash(char *key)
{
unsigned int seed = 131;
unsigned int hash = 0;
while (*key)
{
hash = hash * seed + (*key++);
}
return (hash & 0x7FFFFFFF) % TABLE_SIZE;
}
int insert(char *key,char *value){
//return 1 means OVERWRITE
int pos = BKDRHash(key), m = 0,ret=0;
while (table[pos].flag ) {//has word
if(strcmp(table[pos].key, key) == 0){
ret=1;//key match,OVER_WRITE
break;
}
pos += 2 * (++m) - 1;
if (pos >= TABLE_SIZE) pos -= TABLE_SIZE;
}
if(1!=ret){//over write no need this
strcpy (table[pos].key, key);
}
strcpy (table[pos].value, value);
table[pos].flag = true;//mark that has word
return ret;
}
char* find(char* key){
int pos = BKDRHash(key), m = 0;
while (table[pos].flag) {
if (strcmp(table[pos].key, key) == 0) {
return table[pos].value;
}
else {
pos += 2 * (++m) - 1;
pos = (pos >= TABLE_SIZE ? pos - TABLE_SIZE : pos);
}
}
return NULL;
}
来自为知笔记(Wiz)
附件列表
哈希表
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。