正文代码insert函数处;在为name赋值时出错
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int hashlength=11;
int position(int num)
{
return num%hashlength;
}
typedef struct node
{
string name;
ll num,key;
int flag=0;
}elemtype;
typedef struct
{
elemtype *base;
int count;
int length;
}hash;
void init(hash &h)
{
h.base=(elemtype*)malloc(hashlength*sizeof(elemtype));
h.length=hashlength;
for(int i=0;i<hashlength;i++)
{
h.base[i].key=NULL;
}
}
void insert(hash &h,ll innum,string inname,ll inkey)
{
int address=position(inkey);
while(h.base[address].flag==1)
{
address=(address++)%hashlength;
}
h.base[address].num=innum;
h.base[address].name.assign(inname);
h.base[address].flag=1;
return;
}
int search(hash &h,ll inkey)
{
int address=position(inkey);
if(h.base[inkey].flag==0) return 0;
address=(address++)%hashlength;
while(h.base[address].key!=inkey||h.base[address].flag==1)
{
if(address==position(inkey)||h.base[address].key==NULL) return 0;
address=(address++)%hashlength;
}
cout<<address<<endl;
return address;
}
void searchpro(hash &h)
{
cout<<"请输入查询联系人的首字母(大写):";
char x;
cin>>x;
int inkey=int(x);
int address=position(inkey),findtime=0;
address=(address++)%hashlength;
while(address!=position(inkey))
{
if(h.base[address].key==inkey)
{
findtime++;
cout<<h.base[address].name<<" "<<h.base[address].num<<endl;
}
}
if(findtime==0)
{
cout<<"联系人不存在"<<endl;
}
}
void create(hash &h)
{
cout<<"输入姓名、号码:";
string inname;
ll innum,inkey;
cin>>inname>>innum;
inkey=int(inname[0]);
if(search(h,inkey)) cout<<"已有此记录"<<endl;
else
{
cout<<"录入成功"<<endl;
insert(h,innum,inname,inkey);
}
}
int main()
{
hash hashtable;
init(hashtable);
int n;
cout<<"哈希表长度为11"<<endl;
cout<<"请输入操作次数:";
cin>>n;
while(n)
{
n--;
cout<<"新建联系人请按 1 ,查询请按 2 :";
int a;
cin>>a;
if(a==1)
{
create(hashtable);
continue;
}
else if(a==2) searchpro(hashtable);
else
{
cout<<"请重新输入,";
continue;
}
}
}