徐梦格 2018-12-02 03:22
浏览 489

新手求助,散列查找验证性实验(闭散列)

问题描述:
请设计一个整型闭散列表,散列函数为除留余数法,处理冲突时的探查方法为线性探查法,其中散列表的长度、除留余数法的模和关键码的个数由键盘输入,再根据输入由键盘输入所有的关键码。分别对三个待查值在散列表中进行查找,如果找到了输出位置,如果没找到,输出“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%
不知道哪出问题了,烦请各位大佬解答一下

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 乘性高斯噪声在深度学习网络中的应用
    • ¥15 运筹学排序问题中的在线排序
    • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥30 python代码,帮调试,帮帮忙吧