您的位置:首页 > 理论基础 > 数据结构算法

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

2016-08-17 10:07 260 查看


这道题的关键在于如何实现平方探测法,在充分了解平方探测法的基础上,利用原来位置来加减i的平方左右依次探测。

代码如下:

#include <stdio.h>

#include <string.h>

int main(){

    int n,p,i,d,id;

    int Hash[550],v[550];

    while(scanf("%d %d",&n,&p)!=EOF){

        int len=0;

        memset(Hash,-1,sizeof(Hash));//将数组均置为-1;

        for(i=0;i<n;i++){

            scanf("%d",&d);

            id=d%p;

            if(Hash[id]==-1)

                Hash[id]=d;

            else{

                int f=1,j=1,mid=id;

                while(Hash[mid]!=-1){//若不等于-1,则冲突;

                    mid=(id+f*j*j)%p;//平方探测法;

                    f=f*(-1);

                    if(f==1)

                        j++;

                }

                Hash[mid]=d;

                id=mid;

            }

           v[len++]=id;//用数组来存储位置信息;

        }

    for(i=0;i<len;i++){

        if(i==0)

            printf("%d",v[i]);

        else

            printf(" %d",v[i]);

    }

    printf("\n");

    }

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: