資源簡(jiǎn)介
選取哈西函數(shù)h(k)=k%11,用線(xiàn)性探測(cè)在散列方法處理沖突。是在0-10的散列地址中,對(duì)關(guān)鍵序列(22,41,53,46,30,01,67)構(gòu)造哈希表并求等概率情
況下查找成功與不成功過(guò)的平均查找長(zhǎng)度
代碼片段和文件信息
/*第八章,12題??選取哈西函數(shù)h(k)=k%11,用線(xiàn)性探測(cè)在散列方法處理沖突。是
在0-10的散列地址中,對(duì)關(guān)鍵序列(22415346300167)構(gòu)造哈希表并求等概率情
況下查找成功與不成功過(guò)的平均查找長(zhǎng)度*/
#include
#include
#define??m???11?????
#define??NULLKEY??0
typedef??int??KeyType;????/*?假設(shè)關(guān)鍵字為整型?*/
typedef??struct
{
KeyType??key;
}RecordType;
typedef??RecordType??HashTable[m];
int?hash(KeyType?k)/*選取哈西函數(shù)h(k)=k%11對(duì)傳入的隨便的一個(gè)
?????????????????整數(shù),返回經(jīng)過(guò)哈西函數(shù)計(jì)算后的的一個(gè)數(shù)*/
{
int?h;
h=(3*k)%m;
return?h;
}
int??HashSearch(?HashTable??ht??KeyType??K)?/*傳入插入數(shù)據(jù)后的哈希表的首地址
?????????????????????????????????????和要查找的數(shù)值,返回找到的數(shù)據(jù)值的地址*/
{
int?h0;
int?i;
int?hi;
h0=hash(K);
if??(ht[h0].key==NULLKEY)???????????/*這個(gè)地址沒(méi)有存數(shù)據(jù)*/
return?(-1);?????????????????/*沒(méi)有找到數(shù)據(jù)*/
else?
if?(ht[h0].key==K)??????????????/*直接就找到該地址*/
return?(h0);?????????????????/*返回該地址*/
else???/*?有沖突,用線(xiàn)性探測(cè)再散列解決沖突?*/
{?
for?(i=1;?i<=m-1;??i++)
{
hi=(3*h0+i)?%?m;
if??(ht[hi].key==NULLKEY)???/*這個(gè)地址沒(méi)有存數(shù)據(jù)*/
return?(-1);?????
評(píng)論
共有 條評(píng)論