当前位置:网站首页>【哈希表】很简单的拉链法哈希结构,以至于效果太差,冲突太多,链表太长
【哈希表】很简单的拉链法哈希结构,以至于效果太差,冲突太多,链表太长
2022-06-26 02:48:00 【苏念心】
前言
雨之剑魂重临仙界,万剑齐断、万剑齐鸣,万剑归一!
\;\\\;\\\;
Hash.h
//哈希表--------------------------------------------
//哈希表的容量,每个空就是一个bucket桶
#define Hash_BUCKET_SIZE 128
//哈希元素
typedef struct Hash_kv{
struct Hash_kv* next;
SS* k;
void* v;
}Hash_kv;
//哈希表
typedef struct Hash {
struct Hash_kv* tab[Hash_BUCKET_SIZE];
}Hash;
Hash* newHash();
u4 putHash(Hash* h,SS* key, void* value); //push是从后面添加,put是插入
void* findHash(Hash* h,SS* key, u4 hashcode); //需要查找,所以不是at
u4 hash(SS* key);
void printHash(Hash* h, void(*print)(void*));
\;\\\;\\\;
Hash.c
Hash* newHash() {
Hash* h = (Hash*)malloc(sizeof(Hash));
ASSERT(h == null, "哈希表创建失败");
for (u4 i = 0; i < Hash_BUCKET_SIZE; ++i)
h->tab[i] = null;
return h;
}
u4 putHash(Hash* h, SS* key, void* value) {
ASSERT(h == null, "哈希表为空");
ASSERT(key == null, "输入key为空");
ASSERT(value == null, "输入value为空"); //不存在只有name没有值的标识符
u4 hashcode = hash(key);
//看看是否有冲突
u4 tmp = hashcode % Hash_BUCKET_SIZE;
if (h->tab[tmp] == null) {
//无冲突
Hash_kv* kv = (Hash_kv*)malloc(24);
ASSERT(kv == null, "Hash_kv创建失败1");
kv->k = key;
kv->v = value;
kv->next = null;
h->tab[tmp] = kv;
}
else {
//有冲突
//加在链表后面
Hash_kv* it = h->tab[tmp];
for (; it->next != null; it = it->next){
}
Hash_kv* kv = (Hash_kv*)malloc(24);
ASSERT(kv == null, "Hash_kv创建失败2");
kv->k = key;
kv->v = value;
kv->next = null;
it->next = kv;
}
return hashcode;
}
void* findHash(Hash* h, SS* key, u4 hashcode) {
ASSERT(h == null, "哈希表为空");
ASSERT(key == null, "输入key为空");
Hash_kv* it = h->tab[hashcode % Hash_BUCKET_SIZE];
//此处为空
if (it == null)
return null;
//刚好就是这个
if (it->next == null) {
if (equalSS(it->k,key))
return it->v;
else
return null;
}
//可能是链表上
while (equalSS(it->k, key) == false) {
it = it->next;
if (it == null)
return null;
}
return it->v;
}
u4 hash(SS* key) {
ASSERT(key == null, "安全字符串为空");
ASSERT(key->len == 0, "hash传入字符串为空");
//magic number
u4 seed = 131; /* 31 131 1313 13131 131313 etc.. */
u4 h = 0;
for (u4 i = 0; i < key->len; ++i)
h = (h * seed) + (key->s[i]) ;
return h;
}
void printHash(Hash* h, void(*print)(void*)) {
ASSERT(h == null, "哈希表为空");
for (u4 i = 0; i < Hash_BUCKET_SIZE; ++i) {
printf("[%5d]",i);
Hash_kv* it = h->tab[i];
if (it == null) {
printf("\n");
continue;
}
for (;it!=null;it=it->next) {
printf("[%7s,", it->k->s);
print(it->v);
if (it->next != null)
printf("]->");
else
printf("]");
}
printf("\n");
}
}
\;\\\;\\\;
使用方法
u8 start_time = GetTickCount64();
//测试哈希表
Hash* h = newHash();
#define NUM 300
char v1[20], v2[20];
static u4 hashcode[NUM];
static SS* key[NUM];
static SS* value[NUM];
for (u4 i = 0; i < NUM; ++i) {
key[i] = newSS(20);
memset(v1, 0, 20);
sprintf(v1, "[email protected]%d", i);
moveSS(key[i], v1, 0, 19);
value[i] = newSS(20);
memset(v2, 0, 20);
sprintf(v2, "[email protected]%d", i);
moveSS(value[i], v2, 0, 19);
hashcode[i] = putHash(h, key[i], value[i]);
//printf("[%5d] %d\n", i,hashcode[i] % Hash_BUCKET_SIZE);
}
printHash(h, myprint);
printf("cost %llu ms\n", GetTickCount64() - start_time);
\;\\\;\\\;
结果
[ 0]
[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[ 10]
[ 11]
[ 12]
[ 13]
[ 14]
[ 15]
[ 16]
[ 17]
[ 18]
[ 19]
[ 20][[email protected]100,[email protected]100]
[ 21][[email protected]101,[email protected]101]
[ 22][[email protected]102,[email protected]102]
[ 23][[email protected]103,[email protected]103]->[[email protected]110,[email protected]110]
[ 24][[email protected]104,[email protected]104]->[[email protected]111,[email protected]111]
[ 25][[email protected]105,[email protected]105]->[[email protected]112,[email protected]112]
[ 26][[email protected]106,[email protected]106]->[[email protected]113,[email protected]113]->[[email protected]120,[email protected]120]
[ 27][[email protected]107,[email protected]107]->[[email protected]114,[email protected]114]->[[email protected]121,[email protected]121]
[ 28][[email protected]108,[email protected]108]->[[email protected]115,[email protected]115]->[[email protected]122,[email protected]122]
[ 29][[email protected]109,[email protected]109]->[[email protected]116,[email protected]116]->[[email protected]123,[email protected]123]->[[email protected]130,[email protected]130]->[[email protected]200,[email protected]200]
[ 30][[email protected]117,[email protected]117]->[[email protected]124,[email protected]124]->[[email protected]131,[email protected]131]->[[email protected]201,[email protected]201]
[ 31][[email protected]118,[email protected]118]->[[email protected]125,[email protected]125]->[[email protected]132,[email protected]132]->[[email protected]202,[email protected]202]
[ 32][[email protected]119,[email protected]119]->[[email protected]126,[email protected]126]->[[email protected]133,[email protected]133]->[[email protected]140,[email protected]140]->[[email protected]203,[email protected]203]->[[email protected]210,[email protected]210]
[ 33][[email protected]127,[email protected]127]->[[email protected]134,[email protected]134]->[[email protected]141,[email protected]141]->[[email protected]204,[email protected]204]->[[email protected]211,[email protected]211]
[ 34][[email protected]128,[email protected]128]->[[email protected]135,[email protected]135]->[[email protected]142,[email protected]142]->[[email protected]205,[email protected]205]->[[email protected]212,[email protected]212]
[ 35][[email protected]129,[email protected]129]->[[email protected]136,[email protected]136]->[[email protected]143,[email protected]143]->[[email protected]150,[email protected]150]->[[email protected]206,[email protected]206]->[[email protected]213,[email protected]213]->[[email protected]220,[email protected]220]
[ 36][[email protected]137,[email protected]137]->[[email protected]144,[email protected]144]->[[email protected]151,[email protected]151]->[[email protected]207,[email protected]207]->[[email protected]214,[email protected]214]->[[email protected]221,[email protected]221]
[ 37][[email protected]138,[email protected]138]->[[email protected]145,[email protected]145]->[[email protected]152,[email protected]152]->[[email protected]208,[email protected]208]->[[email protected]215,[email protected]215]->[[email protected]222,[email protected]222]
[ 38][[email protected]139,[email protected]139]->[[email protected]146,[email protected]146]->[[email protected]153,[email protected]153]->[[email protected]160,[email protected]160]->[[email protected]209,[email protected]209]->[[email protected]216,[email protected]216]->[[email protected]223,[email protected]223]->[[email protected]230,[email protected]230]
[ 39][[email protected]147,[email protected]147]->[[email protected]154,[email protected]154]->[[email protected]161,[email protected]161]->[[email protected]217,[email protected]217]->[[email protected]224,[email protected]224]->[[email protected]231,[email protected]231]
[ 40][[email protected]148,[email protected]148]->[[email protected]155,[email protected]155]->[[email protected]162,[email protected]162]->[[email protected]218,[email protected]218]->[[email protected]225,[email protected]225]->[[email protected]232,[email protected]232]
[ 41][[email protected]149,[email protected]149]->[[email protected]156,[email protected]156]->[[email protected]163,[email protected]163]->[[email protected]170,[email protected]170]->[[email protected]219,[email protected]219]->[[email protected]226,[email protected]226]->[[email protected]233,[email protected]233]->[[email protected]240,[email protected]240]
[ 42][[email protected]157,[email protected]157]->[[email protected]164,[email protected]164]->[[email protected]171,[email protected]171]->[[email protected]227,[email protected]227]->[[email protected]234,[email protected]234]->[[email protected]241,[email protected]241]
[ 43][[email protected]158,[email protected]158]->[[email protected]165,[email protected]165]->[[email protected]172,[email protected]172]->[[email protected]228,[email protected]228]->[[email protected]235,[email protected]235]->[[email protected]242,[email protected]242]
[ 44][[email protected]159,[email protected]159]->[[email protected]166,[email protected]166]->[[email protected]173,[email protected]173]->[[email protected]180,[email protected]180]->[[email protected]229,[email protected]229]->[[email protected]236,[email protected]236]->[[email protected]243,[email protected]243]->[[email protected]250,[email protected]250]
[ 45][[email protected]167,[email protected]167]->[[email protected]174,[email protected]174]->[[email protected]181,[email protected]181]->[[email protected]237,[email protected]237]->[[email protected]244,[email protected]244]->[[email protected]251,[email protected]251]
[ 46][[email protected]168,[email protected]168]->[[email protected]175,[email protected]175]->[[email protected]182,[email protected]182]->[[email protected]238,[email protected]238]->[[email protected]245,[email protected]245]->[[email protected]252,[email protected]252]
[ 47][[email protected]169,[email protected]169]->[[email protected]176,[email protected]176]->[[email protected]183,[email protected]183]->[[email protected]190,[email protected]190]->[[email protected]239,[email protected]239]->[[email protected]246,[email protected]246]->[[email protected]253,[email protected]253]->[[email protected]260,[email protected]260]
[ 48][[email protected]177,[email protected]177]->[[email protected]184,[email protected]184]->[[email protected]191,[email protected]191]->[[email protected]247,[email protected]247]->[[email protected]254,[email protected]254]->[[email protected]261,[email protected]261]
[ 49][[email protected]178,[email protected]178]->[[email protected]185,[email protected]185]->[[email protected]192,[email protected]192]->[[email protected]248,[email protected]248]->[[email protected]255,[email protected]255]->[[email protected]262,[email protected]262]
[ 50][[email protected]179,[email protected]179]->[[email protected]186,[email protected]186]->[[email protected]193,[email protected]193]->[[email protected]249,[email protected]249]->[[email protected]256,[email protected]256]->[[email protected]263,[email protected]263]->[[email protected]270,[email protected]270]
[ 51][ [email protected]0, [email protected]0]->[[email protected]187,[email protected]187]->[[email protected]194,[email protected]194]->[[email protected]257,[email protected]257]->[[email protected]264,[email protected]264]->[[email protected]271,[email protected]271]
[ 52][ [email protected]1, [email protected]1]->[[email protected]188,[email protected]188]->[[email protected]195,[email protected]195]->[[email protected]258,[email protected]258]->[[email protected]265,[email protected]265]->[[email protected]272,[email protected]272]
[ 53][ [email protected]2, [email protected]2]->[[email protected]189,[email protected]189]->[[email protected]196,[email protected]196]->[[email protected]259,[email protected]259]->[[email protected]266,[email protected]266]->[[email protected]273,[email protected]273]->[[email protected]280,[email protected]280]
[ 54][ [email protected]3, [email protected]3]->[[email protected]197,[email protected]197]->[[email protected]267,[email protected]267]->[[email protected]274,[email protected]274]->[[email protected]281,[email protected]281]
[ 55][ [email protected]4, [email protected]4]->[[email protected]198,[email protected]198]->[[email protected]268,[email protected]268]->[[email protected]275,[email protected]275]->[[email protected]282,[email protected]282]
[ 56][ [email protected]5, [email protected]5]->[[email protected]199,[email protected]199]->[[email protected]269,[email protected]269]->[[email protected]276,[email protected]276]->[[email protected]283,[email protected]283]->[[email protected]290,[email protected]290]
[ 57][ [email protected]6, [email protected]6]->[[email protected]277,[email protected]277]->[[email protected]284,[email protected]284]->[[email protected]291,[email protected]291]
[ 58][ [email protected]7, [email protected]7]->[[email protected]278,[email protected]278]->[[email protected]285,[email protected]285]->[[email protected]292,[email protected]292]
[ 59][ [email protected]8, [email protected]8]->[[email protected]279,[email protected]279]->[[email protected]286,[email protected]286]->[[email protected]293,[email protected]293]
[ 60][ [email protected]9, [email protected]9]->[[email protected]287,[email protected]287]->[[email protected]294,[email protected]294]
[ 61][[email protected]288,[email protected]288]->[[email protected]295,[email protected]295]
[ 62][[email protected]289,[email protected]289]->[[email protected]296,[email protected]296]
[ 63][[email protected]297,[email protected]297]
[ 64][[email protected]298,[email protected]298]
[ 65][[email protected]299,[email protected]299]
[ 66]
[ 67]
[ 68]
[ 69]
[ 70]
[ 71]
[ 72]
[ 73]
[ 74]
[ 75]
[ 76][ [email protected]10, [email protected]10]
[ 77][ [email protected]11, [email protected]11]
[ 78][ [email protected]12, [email protected]12]
[ 79][ [email protected]13, [email protected]13]->[ [email protected]20, [email protected]20]
[ 80][ [email protected]14, [email protected]14]->[ [email protected]21, [email protected]21]
[ 81][ [email protected]15, [email protected]15]->[ [email protected]22, [email protected]22]
[ 82][ [email protected]16, [email protected]16]->[ [email protected]23, [email protected]23]->[ [email protected]30, [email protected]30]
[ 83][ [email protected]17, [email protected]17]->[ [email protected]24, [email protected]24]->[ [email protected]31, [email protected]31]
[ 84][ [email protected]18, [email protected]18]->[ [email protected]25, [email protected]25]->[ [email protected]32, [email protected]32]
[ 85][ [email protected]19, [email protected]19]->[ [email protected]26, [email protected]26]->[ [email protected]33, [email protected]33]->[ [email protected]40, [email protected]40]
[ 86][ [email protected]27, [email protected]27]->[ [email protected]34, [email protected]34]->[ [email protected]41, [email protected]41]
[ 87][ [email protected]28, [email protected]28]->[ [email protected]35, [email protected]35]->[ [email protected]42, [email protected]42]
[ 88][ [email protected]29, [email protected]29]->[ [email protected]36, [email protected]36]->[ [email protected]43, [email protected]43]->[ [email protected]50, [email protected]50]
[ 89][ [email protected]37, [email protected]37]->[ [email protected]44, [email protected]44]->[ [email protected]51, [email protected]51]
[ 90][ [email protected]38, [email protected]38]->[ [email protected]45, [email protected]45]->[ [email protected]52, [email protected]52]
[ 91][ [email protected]39, [email protected]39]->[ [email protected]46, [email protected]46]->[ [email protected]53, [email protected]53]->[ [email protected]60, [email protected]60]
[ 92][ [email protected]47, [email protected]47]->[ [email protected]54, [email protected]54]->[ [email protected]61, [email protected]61]
[ 93][ [email protected]48, [email protected]48]->[ [email protected]55, [email protected]55]->[ [email protected]62, [email protected]62]
[ 94][ [email protected]49, [email protected]49]->[ [email protected]56, [email protected]56]->[ [email protected]63, [email protected]63]->[ [email protected]70, [email protected]70]
[ 95][ [email protected]57, [email protected]57]->[ [email protected]64, [email protected]64]->[ [email protected]71, [email protected]71]
[ 96][ [email protected]58, [email protected]58]->[ [email protected]65, [email protected]65]->[ [email protected]72, [email protected]72]
[ 97][ [email protected]59, [email protected]59]->[ [email protected]66, [email protected]66]->[ [email protected]73, [email protected]73]->[ [email protected]80, [email protected]80]
[ 98][ [email protected]67, [email protected]67]->[ [email protected]74, [email protected]74]->[ [email protected]81, [email protected]81]
[ 99][ [email protected]68, [email protected]68]->[ [email protected]75, [email protected]75]->[ [email protected]82, [email protected]82]
[ 100][ [email protected]69, [email protected]69]->[ [email protected]76, [email protected]76]->[ [email protected]83, [email protected]83]->[ [email protected]90, [email protected]90]
[ 101][ [email protected]77, [email protected]77]->[ [email protected]84, [email protected]84]->[ [email protected]91, [email protected]91]
[ 102][ [email protected]78, [email protected]78]->[ [email protected]85, [email protected]85]->[ [email protected]92, [email protected]92]
[ 103][ [email protected]79, [email protected]79]->[ [email protected]86, [email protected]86]->[ [email protected]93, [email protected]93]
[ 104][ [email protected]87, [email protected]87]->[ [email protected]94, [email protected]94]
[ 105][ [email protected]88, [email protected]88]->[ [email protected]95, [email protected]95]
[ 106][ [email protected]89, [email protected]89]->[ [email protected]96, [email protected]96]
[ 107][ [email protected]97, [email protected]97]
[ 108][ [email protected]98, [email protected]98]
[ 109][ [email protected]99, [email protected]99]
[ 110]
[ 111]
[ 112]
[ 113]
[ 114]
[ 115]
[ 116]
[ 117]
[ 118]
[ 119]
[ 120]
[ 121]
[ 122]
[ 123]
[ 124]
[ 125]
[ 126]
[ 127]
cost 203 ms
\;\\\;\\\;
边栏推荐
- arduino字符串转16进制数 大彩串口屏用。
- 用元分析法驱动教育机器人的发展
- P2483-[模板]k短路/[SDOI2010]魔法猪学院【主席树,堆】
- Little p weekly Vol.10
- ORB-SLAM3论文概述
- Is it safe to open an account in flush online? How to open a brokerage account online
- Analysis and optimization of ue5 global illumination system lumen
- OpenAPI 3.0 specification - Food Guide
- Stm32cubemx: watchdog ------ independent watchdog and window watchdog
- MySQL updates records based on the queried data
猜你喜欢
少儿编程对国内传统学科的推进作用
用元分析法驱动教育机器人的发展
Possible values for @supply in kotlin
[machinetranslation] - Calculation of Bleu value
丝网印刷的种类及其应用方法
【论文笔记】Supersizing Self-supervision: Learning to Grasp from 50K Tries and 700 Robot Hours
Analysis of the multiple evaluation system of children's programming
Hardware creation principle of campus maker space
应届毕业生谈毕业的故事
Little p weekly Vol.10
随机推荐
Is it safe to open an account in flush online? How to open a brokerage account online
Using meta analysis to drive the development of educational robot
The golang regular regexp package uses -06- other usages (special character conversion, finding the regular common prefix, switching greedy mode, querying the number of regular groups, querying the na
论文回顾:Unmixing-Based Soft Color Segmentation for Image Manipulation
Teach you to quickly record sounds on PC web pages as audio files
【论文笔记】Learning to Grasp with Primitive Shaped Object Policies
[reading papers] fbnetv3: joint architecture recipe search using predictor training network structure and super parameters are all trained by training parameters
MySQL增删查改(初阶)
Mysql常用sql语句之修改表名、删除表、获取表信息、删除指定日期的表记录
NoSQL之Redis配置与优化
ORB-SLAM3论文概述
Modifying table names, deleting tables, obtaining table information, and deleting table records on specified dates for common MySQL statements
【读点论文】FBNetV3: Joint Architecture-Recipe Search using Predictor Pretraining 网络结构和超参数全当训练参数给训练了
[QT] custom control - switch
少儿编程对国内传统学科的推进作用
Utonmos: digital collections help the inheritance of Chinese culture and the development of digital technology
丝网印刷的种类及其应用方法
I am in Zhongshan. Where can I open an account? Is it safe to open an account online?
stm32Cubemx:看门狗------独立看门狗和窗口看门狗
R language survival analysis