雜湊(hash)表 鏈位址法解決衝突

2021-09-10 22:54:05 字數 2002 閱讀 4653

首先要感謝下面博主: mark 一下

說的很清楚,**也能直接用,只是做了一點點小改進:1,將衝突的hash值存放到了鏈尾.2.增加了remove函式,方便刪除不要的節點.此方法中,乙個key至只對應乙個value.

lookup函式:

//定義乙個查詢根據key查詢結點的方法,首先是用hash函式計算頭位址,然後根據頭位址向下乙個個去查詢結點,如果結點的key和查詢的key值相同,則匹配成功,lookup即為查詢key

install 函式:

//定義乙個插入結點的方法,首先是檢視該key值的結點是否存在,如果存在則更改value值就好,如果不存在,則插入新結點。

hashlist3.h的**如下

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

#define hashsize 10

typedef unsigned int uint;

//節點定義,key,value,與next指標

typedef struct nodenode;

//one key to one value

class hashtable;

hashtable::hashtable()

}//bkdr hash 演算法

uint hashtable::bkdrhash(const char* key)

return hash%hashsize;

}uint hashtable::hash(const char* key)

return hash%hashsize;

}node* hashtable::lookup(const char* key,uint &pos)

} return null;

}bool hashtable::install(const char* key,const char* value)

else

tail->next = np;

} // np->next = node[index];

// node[index] = np;

} np->value=value;

return true;

}bool hashtable::remove(const char* key)

else

pre->next = pre->next->next;

} free(np);

return true;

} return false;

}void hashtable::display()

else

printf("]\n");

} }}

測試**(hashlist3.cpp)如下

#include "hashlist3.h"

int main(int argc, char const *ar**)

; const char* value=;

for (int i = 0; i < 5; ++i)

printf("-------------------------\n");

ht->display();

printf("-------------------------\n\n");

ht->remove("u");

ht->display();

printf("-------------------------\n\n");

ht->remove("a");

ht->display();

return 0;

}

執行結果:

原文是將後加入的節點放在鍊錶的最前端,這裡將後加入的節點放置鍊錶最末端.hash演算法有更該.當然少量資料看不到區別,大量資料才有對比性.

雜湊錶鏈位址法解決衝突

問題描述 為了美麗的校園計畫,學校決定改進排隊制度,比如說給飯卡充錢等 給每個人乙個rp值,這個rp值決定這個人來了之後要排的位置,如果當前位置已經有人,那麼從這個位置以後的人後移一位,這個人插進去,如果沒有人的話就直接排到這個位置上去。現在已知按時間從前到後來的人的名字和rp值,求按排隊順序輸出排...

hash table 解決雜湊衝突(鏈位址法)

此 運算雜湊值的運算公式f x x 14 當然也可以通過別的函式運算其雜湊值,由於雜湊值會直接作為下標,因而其雜湊值盡量控制在0 15之間,如若雜湊表過長則會造成空間的浪費,一般來說資料個數 0.75 雜湊表長,比較適宜。2020.1.20 在這個特殊的日子,我決定痛改前非給你們解釋一下我的 新增了...

雜湊表鏈結位址法實現

說明 0 7相對於陣列下標,每個陣列元素下標又相當於乙個單鏈表。ifndef hash h define hash h define hashsize 10 typedef struct node node class hashtable endif hash h include pch.h inc...