#include<stdio.h>
#define N 11
typedef struct st{
int data;
int flag;
}st;
void init(int a[],st hash[],int n){
int j;
for(int i=0;i<n;i++){
j=a[i]%N;
if(hash[j].flag==0){
hash[j].data=a[i];
hash[j].flag=1;
}
else{
while(j<N){
j=(j+1)%N;
if(hash[j].flag==0){
hash[j].data=a[i];
hash[j].flag=1;
break;
}
}
}
}
}
//找到通过 p 返回下标,没找到则插入(若散列表未满)
void search(int k,st hash[]){
int j;
j=k%N;
if(hash[j].data==k){
printf("当前元素位置:%d",j+1);
return;
}
else{
while(j<N-1){
j=(j+1)%N;
if(hash[j].data==k){
printf("当前元素位置:%d",j+1);
return;
}
}
}
j=k%N;
if(hash[j].flag==0){
hash[j].data=k;
hash[j].flag=1;
printf("该元素不存在,插入到表的第%d个位置",j+1);
return;
}
else{
while(j<N-1){
j=(j+1)%N;
if(hash[j].flag==0){
hash[j].data=k;
hash[j].flag=1;
printf("该元素不存在,插入到表的第%d个位置",j+1);
return;
}
}
}
printf("该元素不存在且表已满,无法插入");
}
int main(){
int n,i,a[9]={47,7,29,11,16,92,22,8,3};
st hash[N];
printf("当前散列表长度:%d\n",N);
printf("请输入元素的个数:");
scanf("%d",&n);
printf("请依次输入元素:");
for(int i=0;i<n;i++) scanf("%d",&a[i]);
for(i=0;i<N;i++){
hash[i].flag=0;
hash[i].data=0;
}
init(a,hash,n);
printf("当前散列表中元素:");
for(int i=0;i<N;i++)
printf("%d ",hash[i].data);
printf("\n请输入待查元素:\n");
scanf("%d",&n);
search(n,hash);
printf("\n");
}
数据结构-闭散列表
最新推荐文章于 2024-05-05 16:13:36 发布