电话号码本的快速查找
• 创建基于链地址法的hash表,并实现电话薄的管理(记录不超过20个)。
• 电话薄中的记录包括姓名、电话号码和地址三个数据项,创建两个hash表,关键字分别为姓名和电话号码
• Hash函数为姓名前两个字母/电话号码最后三个数字求和之后对17取余
• 完成记录的插入、查找、显示功能
输入0:增加一条记录。
输入1:根据输入的姓名搜索记录并输出。
输入2:根据输入的电话搜索记录并输出。
输入3:根据姓名查找表输出全部记录。
输入4:根据电话查找表输出全部记录。
输入5:退出。
#include<iostream>
#include<string.h>
#define len 17
using namespace std;
typedef struct node //create node
{
char name[8];//define array for name
char address[20];//define array for address
char tel[11];//define array for telephone num
node* next;
}Person;
typedef struct Hash {
Person* data;
int count;
int sizeindex;
}Hash;
bool makeH(Hash* table);
bool insetH(Hash* nametable, Hash* teltable, Person person);
bool searchnameH(Hash* nametable, char name[]);
bool searchtelH(Hash* teltable, char tel[]);
bool searchname(Person* head, char name[]);
bool searchtel(Person* head, char tel[]);
int getnamekey(char name[]) {
return (name[0] + name[1]) % 17;
}
int gettelkey(char tel[]) {
return((tel[10] - '0') * 10 + (tel[11] - '0')) % 17;
}
int main() {
Hash nametable, teltable;
makeH(&nametable);
makeH(&teltable);
Person *person, *head,*p;
head = NULL;
int i;
char name[8], tel[11];
do {
cin >> i;
switch (i) {
case 0:person = new(Person);
cin >> person->name >> person-<