資料結構實驗:線性之雜湊表
阿新 • • 發佈:2020-12-11
G - 資料結構實驗之查詢七:線性之雜湊表
Description
根據給定的一系列整數關鍵字和素數p,用除留餘數法定義hash函式H(Key)=Key%p,將關鍵字對映到長度為p的雜湊表中,用線性探測法解決衝突。重複關鍵字放在hash表中的同一位置。
Input
連續輸入多組資料,每組輸入資料第一行為兩個正整數N(N <= 1500)和p(p >= N的最小素數),N是關鍵字總數,p是hash表長度,第2行給出N個正整數關鍵字,數字間以空格間隔。
Output
輸出每個關鍵字在hash表中的位置,以空格間隔。注意最後一個數字後面不要有空格。
Sample
Input
5 5
21 21 21 21 21
24 15 61 88
4 5
24 39 61 15
5 5
24 39 61 15 39
Output
1 1 1 1 1
4 0 1 3
4 0 1 2
4 0 1 2 0
#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 10;
int vis[N], ans[N];
int n, m;
int Hash(int v) {
int k = v % m;
for (int i = k;; i++) {
int now = i % m;
if (vis[ now] == -1 || vis[now] == v) {
vis[now] = v;
return now;
}
}
}
int main() {
while (~scanf("%d %d", &n, &m)) {
memset(vis, -1, sizeof(vis));
for (int i = 0; i < n; i++) {
int v;
scanf("%d", & v);
ans[i] = Hash(v);
}
for (int i = 0; i < n; i++) {
printf("%d%c", ans[i], i == n - 1 ? '\n' : ' ');
}
}
}