###题目:【问题描述】
设计哈希表实现电话号码查询系统。要求实现以下功能:
1、哈希表中每个元素有下列数据项:电话号码、用户名、住址;
2、读入各个元素,以电话号码为关键字建立哈希表(哈希表的长度为8,存储位置为0到7);
3、采用除留余数法进行哈希表的散列,即以电话号码作为关键字,将电话号码的11位相加,按照模7取余;
4、采用链地址法解决冲突;
务必采用哈希表,如果采用其他查找方式,本题得分为0。
【输入形式】
第一行输入元素个数n
下面n行为输入的元素信息
下面若干行为查询信息,每行信息为一个电话号码,对应输出为姓名,如果没有这个结果则输出No Person
【输出形式】
根据输入中查询的元素信息,针对输出
【样例输入】
5
Zhangsan 13911233322 China
Lisi 15911225487 Baoding
Wangwu 13865894587 Ncepu
Liuliu 19845786987 Beijing
Liqi 16896874521 Xiongan
15911225487
19845786987
14523658745
【样例输出】
Lisi
Liuliu
No Person
#include<iostream>
#include<string>
using namespace std;
int hash1(int key){
int key1=0;
while(key>0){
key1+=key%10;
key=key/10;
}
key1=key1%7;
return key1;
}
typedef struct hashnode{
int key;
string name;
string address;
struct hashnode* next;
}*phashnode;
void search(phashnode hst[],int key){
int h=hash1(key);
phashnode p=hst[h];
while(p->key!=key){
p=p->next;
if(p==NULL){
cout<<"No Person"<<endl;
}
}
cout<<p->name<<endl;
}
void insert1(phashnode hst[],int key,string name,string address){
int h=hash1(key);
if(hst[h]==NULL){
phashnode q=new hashnode;
q->key=key;
q->name=name;
q->address=address;
q->next=NhLL;
hst[h]->next=q;
}
else
{
phashnode s=hst[h];
while(s->key!=key&&s->next!=NULL)
s=s->next;
if(s->key==key)
return;
else{
phashnode q=new hashnode;
q->key=key;
q->next=NULL;
s->next=q;
}
}
}
int main(){
phashnode hst[7];
int n;
cin>>n;
string name;
string address;
int key;
for(int i=0;i<n;i++){
cin>>name>>key>>address;
insert1(hst,key,name,address);
}
while(cin>>key){
search(hst,key);
}
return 0;
}````
q->next=NhLL;
改为
q->next=NULL;