问题描述:
请设计一个整型闭散列表,散列函数为除留余数法,处理冲突时的探查方法为线性探查法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,如果找到了输出位置,如果没找到,输出“none”并把该待查值插入到散列表中,如果散列表满输出“full”。
输入描述:
各个命令以及相关数据的输入格式如下:
第一行输入闭散列表的长度n
第二行输入除留余数法的模m
第三行输入关键码的个数num
第四行输入num个整型关键码
第五行输入三个待查整型值
输出描述:
输出三行,每行格式为:
如果找到待查值,输出找到待查值的位置,如果没找到,输出“none”,并将待查值插入到散列表中,如果散列表满,则输出“full”,每个待查值占一行
输入样例:
11 11 9
2 6 8 9 13 17 10 12 20
3 7 11
输出样例:
none
none
full
代码:#include
using namespace std;
class A{
public:
A(int a[],int ,int ,int );
void B();
private:
int x;
int y;
int z;
int r[50];
};
A::A(int a[],int n,int m,int num){
x=n;y=m;z=num;
int i,k,j,d;
for(i=0;i
for(i=0;i
k=a[i]%y;
if(r[k]==-1)r[k]=a[i];
else{ j=(k+1)%y;
while(r[j]!=-1&&j!=k)
j=(j+1)%y;
if (r[j]==-1)r[j]=a[i];
}
}
}
void A::B(){
int i,j,k,s;
cin>>i;
j=i%y;
if(r[j]==i)cout<<j<<endl;
else if(r[j]==-1){r[j]=i;cout<<"none"<<endl;return;}
else {
k=(j+1)%y;
while(r[k]!=-1&&k!=j){
if(r[k]==i){cout<<k<<endl;return;}
else {
k=(k+1)%y;
}
}
if (r[k]==-1){r[k]=i;cout<<"none"<<endl;return;}
else {cout<<"full";return;}
return;
}
}
int main(){
int n,m,num,a[50];
cin>>n;
cin>>m;
cin>>num;
for(int i=0;i
cin>>a[i];
A f(a,n,m,num);
for(int i=0;i<3;i++)
f.B();
return 0;
}
我提交后的正确率为75%
不知道哪出问题了,烦请各位大佬解答一下