用拉链法创建了一个哈希表。从文件中读取内容到哈希表中,duruhash(H)函数报错,应该是H参数错了,但我在inserthash(H)函数中,是成功运行了的,那H应该是没错的
有没有兄弟能帮帮我
显示错误: [Error] cannot convert 'Hashnode**' to 'hashbit {aka Hashnode*}' for argument '1' to 'void duruhash(hashbit)'
#include<iostream>
#include<fstream>
using namespace std;
#define MAXSIZE 20
#define n 19
typedef struct aa//将哈希表节点的数据域变为复合型,以便储存密码和金额
{
int zhanghao;
int mima;
int money;
}bb;
typedef struct Hashnode//哈希表的储存结构
{
bb data;
struct Hashnode *prior;
struct Hashnode *next;
}hashnode,*hashbit;
void inithash(hashbit H[])//初始化哈希表
{
int i;
for(i=0;i<MAXSIZE;i++)
{
H[i]=new hashnode;
H[i]->data.zhanghao=0;
H[i]->data.mima=0;
H[i]->data.money=0;
H[i]->prior=NULL;
H[i]->next=NULL;
}
}
void readtext(int ab[]) //从文件中分别读取读取储户的账号,密码,储存金额信息,存入数组ab中
{
int i=0;
fstream in("haxi.txt");
cin.rdbuf(in.rdbuf()); //将输入信息从控制台转向txt文件
for(i=0;i<100;i++){
cin>>ab[i]; //输入到数组中的数据是从txt文件中读取到的,不用再在控制台输入
}
//文件信息读入完成,成功存入ab[]数组中
//将ab[]数组中的信息存入哈希表中
}
void duruhash(hashbit H)
{
int x,i;
int ab[100]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
while(ab[i]!='\0')
{
hashbit p=new hashnode;
hashbit q=new hashnode;
x=ab[i]%n;//散列函数
p->next=NULL;
p->data.zhanghao=ab[i];
p->data.mima=ab[i+1];
p->data.money=ab[i+2];
q=&H[x];
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;//
p->prior=q;//指向前驱节点
i=i+3;
}
}
void inputhash(hashbit H)
{
int ab[100]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30};
hashbit p=new hashnode;
hashbit q=new hashnode;
int i=30;
int x;
x=ab[i]%n;//散列函数
for(i=0;i<30;i++)
{
p->next=NULL;
p->data.zhanghao=ab[i];
p->data.mima=ab[i+1];
p->data.money=ab[i+2];
q=&H[x];
while(q!=NULL)
{
q=q->next;
}
q->next=p;//
p->prior=q;//指向前驱节点
i=i+3;
}
}
void inserthash(hashbit H[])//开户
{
int a,b,c;
cout<<"请设置您的账户(两位数字):";
cin>>a;
cout<<"请设置您的账户密码(不超过四位数字):";
cin>>b;
cout<<"请输入您的存款金额:";
cin>>c;
int i=a%n;
hashbit p=new hashnode;
hashbit q=new hashnode;
p->next=NULL;
p->data.zhanghao=a;
p->data.mima=b;
p->data.money=c;
q=H[i];
while(q->next!=NULL)
{
q=q->next;
}
q->next=p;
p->prior=q;
cout<<"开户成功!"<<endl;
}
hashnode *searchhash(hashbit H[])//查询账户信息 ,输入账号a和密码b进行查询
{
int a,b;
cout<<"请输入您的账户和密码(用空格隔开):";
cin>>a>>b;
int i=a%n;
int j=0;
hashbit p=new hashnode;
p=H[i];
while(p->next!=NULL)
{
p=p->next;
if(p->data.zhanghao==a)//存在此账户
{
if(p->data.mima==b)//此账户密码错正确
{
j=j+1;
break;
}
else//此账户密码错误
{
j=3;
break;
}
}
}
if(j==0)
{
cout<<"不存在此账户!"<<endl;
return NULL; //不存在,返回空地址
}
else if(j==1)
{
cout<<"您的账户余额:"<<p->data.money<<endl;
return p;//存在,返回其地址
}
else
{
cout<<"您的账号密码错误!"<<endl;
return NULL;
}
}
void detehash(hashbit H[])//注销账户
{
int a,b;
cout<<"请输入您的账户和密码(用空格隔开):";
cin>>a>>b;
hashbit p=new hashnode;
p=searchhash(H);
if(p!=NULL)
{
hashbit q=new hashnode;
hashbit s=new hashnode;
q=p->prior;
s=p->next;
q->next=s;
s->prior=q;
}
cout<<"您的账户已成功注销!"<<endl;
}
void addhash(hashbit H[])//存款
{
hashbit p=new hashnode;
int a,b,c;
cout<<"请输入您的账户,密码和存款金额(用空格隔开):";
cin>>a>>b>>c;
int i=a%n;
int j=0;
p=H[i];
while(p->next!=NULL)
{
p=p->next;
if(p->data.zhanghao==a)//存在此账户
{
if(p->data.mima==b)//此账户密码错正确
{
j=j+1;
break;
}
else//此账户密码错误
{
j=3;
break;
}
}
}
if(j==0)
{
cout<<"不存在此账户!"<<endl;
}
else if(j==1)
{
p->data.money+=c;
cout<<"存款成功!";
cout<<"您的账户余额:"<<p->data.money<<endl;
}
}
void minushash(hashbit H[])//取款
{
hashbit p=new hashnode;
int a,b,c;
cout<<"请输入您的账户,密码和存款金额(用空格隔开):";
cin>>a>>b>>c;
int i=a%n;
int j=0;
p=H[i];
while(p->next!=NULL)
{
p=p->next;
if(p->data.zhanghao==a)//存在此账户
{
if(p->data.mima==b)//此账户密码错正确
{
j=j+1;
break;
}
else//此账户密码错误
{
j=3;
break;
}
}
}
if(j==0)
{
cout<<"不存在此账户!"<<endl;
}
else if(j==1)
{
if(p->data.money>=c)
{
cout<<"取款成功!";
cout<<"您的账户余额:"<<p->data.money<<endl;
}
else
{
cout<<"您的余额不足!";
cout<<"您的账户余额:"<<p->data.money<<endl;
}
}
}
void shuchuhash(hashbit H[])//输出所有账户及其信息
{
int i;
hashbit p=new hashnode;
for(i=0;i<MAXSIZE;i++)
{
p=H[i];
while(p!=NULL)
{
cout<<"账户:"<<p->data.zhanghao <<"余额:"<<p->data.money<<endl;
p=p->next;
}
}
}
void jiluhash(hashbit H[])//查询交易记录
{
int a,b;
cout<<"请输入您的账户和密码(用空格隔开):";
cin>>a>>b;
}
int main()
{
int a,b,c;
int m;
hashbit H[n];
inithash(H);
// readtext(ab);
duruhash(H);
cout<<"本系统服务有:"<<endl;
cout<<"1.开户"<<endl<<"2.存款"<<endl<<"3.取款"<<endl<<"4.查询余额"<<endl<<"5.销户"<<endl<<"6.查看所有账户信息"<<endl<<"7.查询账户的历史交易记录"<<endl;
cout<<"请输入需要的服务的代号:";
cin>>m;
while(m!='\0')
{
hashbit p=new hashnode;
switch(m)
{
case 1:{
inserthash(H);
break;
}
case 2:{
addhash(H);
break;
}
case 3:{
minushash(H);
break;
}
case 4:{
p=searchhash(H);
break;
}
case 5:{
detehash(H);
break;
}
case 6:{
shuchuhash(H);
break;
}
case 7:{
cout<<"请输入您的账户和密码(用空格隔开):";
cin>>a>>b;
jiluhash(H);
break;
}
default:{
cout<<"错误!请重新输入!"<<endl;
break;
}
}
cout<<"请输入需要的服务的代号:";
cin>>m;
}
return 0;
}
用拉链法创建了一个哈希表。从文件中读取内容到哈希表中,出现了问提,有没有兄弟能知道
显示错误: [Error] cannot convert 'Hashnode**' to 'hashbit {aka Hashnode*}' for argument '1' to 'void duruhash(hashbit)'