一、要求:
【问题描述】
设计散列表实现电话号码查找系统。
【基本要求】
1) 设每个记录有下列数据项:电话号码、用户名、地址;2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;3) 采用一定的方法解决冲突;4) 查找并显示给定电话号码的记录;5) 查找并显示给定用户名的记录。
【进一步完成内容】
1) 系统功能的完善;2) 设计不同的散列函数,比较冲突率;3) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。
二、代码
头文件:Hash.h
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <windows.h>
#define MAXSIZE 20 //电话薄记录数量
#define MAX_SIZE 20 //人名的最大长度
#define HASHSIZE 53 //定义表长
#define ok 1
#define error -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct //记录
{
NA name;
NA tel;
NA add;
} Record;
typedef struct
{//散列表
Record *elem[HASHSIZE]; //数据元素存储基址
int count; //当前数据元素个数
int size; //当前容量
} HashTable;
Status eq(NA x,NA y)
{
//关键字比较,相等返回1;否则返回-1
if(strcmp(x,y)==0)
return ok;
else return error;
}
Status NUM_BER; //记录的个数
源文件:Hash.cpp
#include "stdio.h"
#include "stdlib.h"
#include "string"
#include "windows.h"
#include "Hash.h"
void getin(Record* a)
{
//键盘输入各人的信息
printf("输入要添加的个数:\n");
scanf("%d",&NUM_BER);
int i;
for(i=0; i<NUM_BER; i++)
{
printf("请输入第%d个记录的用户名:\n",i+1);
scanf("%s",a[i].name);
printf("请输入%d个记录的电话号码:\n",i+1);
scanf("%s",a[i].tel);
printf("请输入第%d个记录的地址:\n",i+1);
scanf("%s",a[i].add);
}
}
void ShowInformation(Record* a) //显示输入的用户信息
{
int i;
for( i=0; i<NUM