鏈地址處理法構造簡單哈希表

鏈地址法:將所有關鍵字爲同義詞的記錄保存在一個線性鏈表中(拉鍊法)

設某哈希函數產生的哈希地址在區間[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
	}

運行結果




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章