1. 程式人生 > 其它 >資料結構實驗:線性之雜湊表

資料結構實驗:線性之雜湊表

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

4 5
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' : ' '); } } }