线性探测-Hash表的创建-查找

时间:2025-04-01 07:09:08
  • #include<>
  • #include<>
  • #include<>
  • #define N 10005
  • int Check[N];
  • int ImportData[N];
  • int P(int n){
  • for(int i=2;i<=sqrt(n);i++){
  • if(n%i==0)
  • return 0;
  • }
  • return 1;
  • }
  • int HashFunction(int key,int n){
  • return key%n;
  • }
  • void Output(int a[],int n){
  • for(int i=0;i<n;i++){
  • printf("%d ",a[i]);
  • }
  • printf("\n");
  • }
  • void Inputdata(int a[],int data[],int maxprime,int len,int num){
  • for(int i=0;i<num;i++){
  • int index=HashFunction(data[i],maxprime);
  • if (a[index]==data[i]){
  • continue;
  • }
  • if(!Check[index]){
  • a[index]=data[i];
  • Check[index]=1;
  • }
  • else{
  • for(int j=index+1;j!=index;j++){
  • if(j>=len){
  • j=0;
  • }
  • if (a[j]==data[i]){
  • break;
  • }
  • if(!Check[j]){
  • a[j]=data[i];
  • Check[j]=1;
  • break;
  • }
  • }
  • }
  • }
  • }
  • void InitTable(int a[],int n){
  • for(int i=0;i<n;i++){
  • Check[i]=0;
  • a[i]=0;
  • }
  • }
  • int Hash_Search(int key,int data[],int maxprime){
  • int index=HashFunction(key,maxprime);
  • if(!data[index])
  • return 0;
  • if(data[index]==key){
  • return index;
  • }
  • else{
  • for(int i=1;i<maxprime;i++){
  • index=HashFunction(key+i,maxprime);
  • if(!data[index]){
  • return 0;
  • }
  • if(data[index]==key){
  • return index;
  • }
  • }
  • return 0;
  • }
  • }
  • int main(){
  • int n,num;
  • while(scanf("%d %d",&num,&n)!=EOF){
  • int * data=(int *)malloc(sizeof(int)*n);
  • InitTable(data,n);
  • int maxprime;
  • int i=num;
  • while(1){
  • if(P(i)){
  • maxprime=i;
  • break;
  • }//最小素数
  • i++;
  • }
  • for(int j=0;j<num;j++){
  • scanf("%d",ImportData+j);
  • }
  • Inputdata(data,ImportData,maxprime,n,num);
  • for(int k=0;k<num;k++){
  • k!=num-1?printf("%d ",Hash_Search(ImportData[k],data,maxprime)):printf("%d\n",Hash_Search(ImportData[k],data,maxprime));
  • }
  • data=NULL;
  • }
  • return 0;
  • }