哈希表的查找 2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告
实验名称哈希表的设计
课程名称算法与数据结构实验
专业班级:学生姓名:
学号:成绩:
指导教师:
实验日期:
一、实验目的及要求
1.内容描述
设计哈希表实现电话号码查询系统:
1)设每个记录有如下数据项:电话号码、用户名、地址;
2)从键盘输入各个记录,以电话号码为关键字建立哈希表(至少要有12个以上的记录,哈希表的哈希表的长度为8);
3)用链地址法解决冲突;
4)显示建立好的哈希表,并且对其进行查找,删除和插入给定关键字值得记录。
二、所用仪器、设备
VC++ 6.0环境
三、实验说明
1.采用除留余数法进行哈希表的散列,即以电话号码作为主关键字,将电话号码的11位相加,按照模7取余;
2.解决冲突用链地址法。
3.将用户信息包装在结构体节点中
struct node //建节点
{
char name[8],address[20];
char num[11];
node * next;
};
4.对于用户信息的查找,这里运用了以姓名和电话号码两种查找标准进行查找,链地址的存在使得冲突消除,同时查找实现。
5.清空的实现是设立了一个清空函数,是哈希表的所有成员内容为空,在主函数中进行调用,实现全部信息删除功能。
四、实验源代码
#include
using namespace std;
#include "string.h"
#include "fstream"
#define NULL 0
unsigned int key;
unsigned int key2;
int *p;
struct node //建节点
{
char name[8],address[20];
char num[11];
node * next;
};
typedef node *pnode;
typedef node *mingzi;
node **phone;
node **nam;
node *a;
void Hash(char num[11]) //哈希函数{
int i = 3;
key=(int)num[2];
while(num[i]!=NULL)
{
key+=(int)num[i];
i++;
}
key=key%7;
}
void Hash2(char name[8]) //哈希函数{
int i = 1;
key2=(int)name[0];
while(name[i]!=NULL)
{
key2+=(int)name[i];
i++;
}
key2=key2%7;
}
node* input() //输入节点
{
node *temp;
temp = new node;
temp->next=NULL;
cout<<"输入姓名:"< cin>>temp->name; cout<<"输入地址:"< cin>>temp->address; cout<<"输入电话:"< cin>>temp->num; return temp; } int apend() //添加节点 { node *newphone; node *newname; newphone=input(); newname=newphone; newphone->next=NULL; newname->next=NULL; Hash(newphone->num); Hash2(newname->name); newphone->next = phone[key]->next; phone[key]->next=newphone; newname->next = nam[key2]->next; nam[key2]->next=newname; return 0; } void create() //新建节点 { int i; phone=new pnode[20]; for(i=0;i<8;i++) { phone[i]=new node; phone[i]->next=NULL; } } void create2() //新建节点 { int i; nam=new mingzi[20]; for(i=0;i<8;i++) { nam[i]=new node; nam[i]->next=NULL; } } void list() //显示列表 { int i; node *p; for(i=0;i<20;i++) { p=phone[i]->next; while(p) { cout< p=p->next; } } }