鏈地址法:將所有關鍵字爲同義詞的記錄保存在一個線性鏈表中(拉鍊法)
設某哈希函數產生的哈希地址在區間[0,12]上,則創建指針數組add[12],其中每個元素都是一個單項鍊表的頭結點(有值)。
由於僅僅是簡單的實現。。插入鏈表時沒有做排序的處理。。
鏈表節點定義:
typedef struct node
{
int data;
struct node *next;
}Elem ,*Link;
設已知的一組關鍵字爲 19,14,23,1,68,20,84,27,55,11,10,79共12個,按哈希函數H(key)=key MOD 13構造簡單哈希表。
<pre name="code" class="cpp"> int data[12]={19,14,23,1,68,20,84,27,55,11,10,79},key,i,j;
Link add[13]={NULL};
Link p,q;
for(i=0;i<12;i++)
{
key=data[i]%13;
p=(Link)malloc(sizeof(Elem));
p->data =data[i];
p->next =NULL;
if(!add[key]) add[key] =p;//如果頭結點爲空,則直接爲頭結點賦值
else
{
for(q=add[key];q->next ;q=q->next );//q作p前趨
q->next =p;
}
}
至此這個簡易的哈希表已經創建成功,於是乎輸出一下看看結果
for(j=0;j<13;j++)
{
if(add[j])
{
q=add[j];
while(q)
{
printf("%5d",q->data );
q=q->next ;
}
printf("\n");//每個單鏈表作爲一行
}
else
printf("NULL\n");//若頭結點爲空,就直接輸出一個NULL
}
運行結果