数据结构实验之查找五:平方之哈希表

来源:互联网 发布:汽车用品淘宝 编辑:程序博客网 时间:2024/06/18 04:27

Problem Description

给定的一组无重复数据的正整数,根据给定的哈希函数建立其对应hash表,哈希函数是H(Key)=Key%P,P是哈希表表长,P是素数,处理冲突的方法采用平方探测方法,增量di=±i^2,i=1,2,3,...,m-1

Input

输入包含多组测试数据,到 EOF 结束。

每组数据的第1行给出两个正整数N(N <= 500)和P(P >= 2N的最小素数),N是要插入到哈希表的元素个数,P是哈希表表长;第2行给出N个无重复元素的正整数,数据之间用空格间隔。

Output

按输入数据的顺序输出各数在哈希表中的存储位置 (hash表下标从0开始),数据之间以空格间隔,以平方探测方法处理冲突。

Example Input

4 1110 6 4 159 1147 7 29 11 9 84 54 20 30

Example Output

10 6 4 53 7 8 0 9 6 10 2 1

Hint

Author

xam
#include<stdio.h>#include<string.h>#define L 550int s1[L];int s2[L];int main(){    int N, P;    while(~scanf("%d%d", &N, &P))    {        memset(s1, -1, sizeof(s1));        memset(s2, -1, sizeof(s2));        int u;        int i, k, j;        for(i = 0; i < N; i++)        {            scanf("%d", &u);            k = u % P;            if(s1[k] == -1)            {                s1[k] = u;                s2[i] = u;            }            else            {                int di = 1;                int z, f;                z = di * di;                f = k;                j = 1;                while(s1[f] != -1)                {                    z = j * di * di;                    f =  k + z;                    if(f >= P)                    {                        f = f - P;                    }                    if(j == -1)                    {                        di++;                    }                    j = -j;                }                s1[f] = u;                s2[i] = u;            }        }        for(i = 0; i < N; i++)        {            for(j = 0; j < L; j++)            {                if(s1[j] == s2[i])                {                    if(i == 0)                    {                        printf("%d",j);                    }                    else                    {                        printf(" %d", j);                    }                }            }        }        printf("\n");    }    return 0;}
写得不够简洁,欢迎各位提出改进建议奋斗奋斗
阅读全文
0 0