/**
* 已知一組關鍵字為,
* 按hash函式為h(key) = key mod 13和鏈位址法處理衝突構造hash表。
* 結果如圖:
* hash[0]
* hash[1]-->01-->14-->27-->70-->null
* hash[2]
* hash[3]-->55-->68-->null
* hash[4]
* hash[5]
* hash[6]-->19-->84-->null
* hash[7]-->20-->null
* hash[8]
* hash[9]
* hash[10]-->10-->23-->null
* hash[11]-->11-->null
* hash[12]
*/#include #include #include #include #define htable_size (13)
#define htable_alg (13) /* 用於hash函式取餘數 */
typedef int elementtype ;
/* 記錄 */
typedef struct tagstnode
stnode;
/* hash表 */
typedef struct tagsthtable
sthtable;
/* hash函式
* h(key) = key mod 13
* */
int hashfunc(int inum);
/* 列印hash表 */
void printhtable(sthtable *psthtable);
/* 將值為inum的節點存入hash表中 */
int storenum2htable(sthtable *psthtable, int inum);
/* hash函式 */
int hashfunc(int inum)
/* 將值為inum的節點存入hash表中 */
int storenum2htable(sthtable *psthtable, int inum)
/* 存在衝突時,直接插入鍊錶尾部 */
else
/* 將資料節點插入hash表中某一鍊錶的最後 */
pstp->pstnext = psttmpnode;
#else
/* 按從小到大的順序插入 */
pstp = psthead->pstnext;
pstq = psthead; /* pstq用於指向pstp前乙個節點,主要是方便插入節點 */
while (null != pstp)
else
}/* 插入新節點 */
psttmpnode->pstnext = pstq->pstnext;
pstq->pstnext = psttmpnode;
}#endif
return 0;
}/* 列印hash表 */
void printhtable(sthtable *psthtable)
printf("\n");
} return ;
}/* 主函式 */
int main(int argc, char **argv)
; /* 測試序列 */
// int aiarry = ; /* used for test */
int iarrylen = sizeof(aiarry)/sizeof(int);
int icount = 0;
sthtable sthtable;
memset(&sthtable, 0, sizeof(sthtable));
for (; icount < iarrylen; icount++)
printhtable(&sthtable);
return 0;
}
雜湊錶鏈位址法解決衝突
問題描述 為了美麗的校園計畫,學校決定改進排隊制度,比如說給飯卡充錢等 給每個人乙個rp值,這個rp值決定這個人來了之後要排的位置,如果當前位置已經有人,那麼從這個位置以後的人後移一位,這個人插進去,如果沒有人的話就直接排到這個位置上去。現在已知按時間從前到後來的人的名字和rp值,求按排隊順序輸出排...
雜湊(hash)表 鏈位址法解決衝突
首先要感謝下面博主 mark 一下 說的很清楚,也能直接用,只是做了一點點小改進 將衝突的hash值存放到了鏈尾 增加了remove函式,方便刪除不要的節點 此方法中,乙個key至只對應乙個value lookup函式 定義乙個查詢根據key查詢結點的方法,首先是用hash函式計算頭位址,然後根據頭...
雜湊表鏈結位址法實現
說明 0 7相對於陣列下標,每個陣列元素下標又相當於乙個單鏈表。ifndef hash h define hash h define hashsize 10 typedef struct node node class hashtable endif hash h include pch.h inc...