哈希表的查找 2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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<name<<'_'<address<<'_'<num<

p=p->next;

}

}

}

相关文档
最新文档