1. 程式人生 > 其它 >整型關鍵字的雜湊對映

整型關鍵字的雜湊對映

資料結構實驗五的程式設計題,典型的例題

給定一系列整型關鍵字和素數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;
}