整型關鍵字的雜湊對映
阿新 • • 發佈:2022-12-09
資料結構實驗五的程式設計題,典型的例題
給定一系列整型關鍵字和素數P,用除留餘數法定義的雜湊函式H(Key)=Key將關鍵字對映到長度為P的散列表中。用線性探測法解決衝突。
輸入格式:
輸入第一行首先給出兩個正整數N(≤1000)和P(≥N的最小素數),分別為待插入的關鍵字總數、以及散列表的長度。第二行給出N個整型關鍵字。數字間以空格分隔。
輸出格式:
在一行內輸出每個整型關鍵字在散列表中的位置。數字間以空格分隔,但行末尾不得有多餘空格。
輸入樣例:
4 5
24 15 61 88
輸出樣例:
4 0 1 3
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int i, n, p, x, k; scanf("%d %d", &n, &p); int *s = (int *)malloc(sizeof(int)*p); memset(s, 0, sizeof(int)*p); //初始化動態陣列s[] for(i = 0; i < n; i ++) { scanf("%d", &x); k = x % p; if(s[k] == 0) { //如果此位置為空,直接存放 s[k] = x; } else { //否則 while(s[k] != 0 && s[k] != x) { //依次往後尋找,直到找到空位,或者找到具有相同的值的數字 k = (k+1) % p; } if(s[k] != x) { //如果沒有相等的,那麼儲存x s[k] = x; } //否則,不用重複儲存x } if(i == 0) { printf("%d", k); } else { printf(" %d", k); } } return 0; }