设计散列表实现电话号码查找系统。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北科技学院

课程设计说明书

学号:

班级: 网络B15-1 姓名:

设计题目: 散列表的设计与实现

设计地点:___________________________

设计时间: 2017-2-27 至2017-3-10

成绩评定:

1、工作量: A(),B(),C(),D(),F( )

2、难易度:A(),B(),C(),D(),F( )

3、答辩情况:A(),B(),C(),D(),F( )

4、报告规范度:A(),B(),C(),D(),F( )

5、学习态度:A(),B(),C(),D(),F( )总评成绩:___________________________

指导教师: 朱冬梅

一、问题描述与需求分析

1、问题描述

设计散列表实现电话号码查找系统。

2、功能需求分析

1) 每个记录有下列数据项:电话号码、用户名、地址;

2) 从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;

3) 采用一定的方法解决冲突;

4) 查找并显示给定电话号码的记录;

5) 查找并显示给定用户名的记录。

6) 在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平

均查找长度的变化。

二、概要设计

1、总体设计思路

程序的总体实现思路、方法:

本程序使用了链地址法和开放定址法处理冲突,可以实现从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;查找并显示给定电话号码的记录;查找并显示给定用户名的记录;计算使用不同方法处理冲突时的平均查找长度。

当使用链地址法处理冲突,电话号码为关键字建立散列表时,使用除留余数法(t=e->number%n),确定哈希地址。

当使用链地址法处理冲突,用户名为关键字建立散列表时,把储存用户名的字符数组(name)的0号位置的字符(name[0])强制转换为int类型(i),即i=(int)name[0],再使用除留余数法确定哈希地址(i=i%n,n=13)。

当使用开放定址法处理冲突,电话号码为关键字建立散列表时,增量序列取用线性探测再散列法。

当使用开放定址法处理冲突,用户名为关键字建立散列表时,把储存用户名的字符数组(name2)的0号位置的字符(name2[0])强制转换为int类型(e),即e=(int)name[0],使用开放定址法取得哈希地址,如果产生冲突增量取用线性探测再散列法。

程序总的功能结构图。

2、模块简介

链地址法:

void hashlistinit(newnode **p)//初始化散列表

void hashinputname(newnode **p)//添加记录(以用户名为关键字)void hashshow2name(newnode **p)//查询记录(以用户名为关键字)void hashinput(newnode **p)//添加记录(以号码为关键字)

void hashshow(newnode **p)//查询记录(以号码为关键字)

void ASL(newnode **p)//计算ASL

开放定址法

void hashlistinit2(anode3 w)//初始化散列表

void hashinput2(anode3 w)//添加记录(以号码为关键字) void hashshow2(anode3 w)//查询记录(以号码为关键字) void hashinputname2(anode3 w{//添加记录(以用户名为关键字) void hashshow2name2(anode3 w)//查询记录(以用户名为关键字) void ASL2(anode3 w)//计算ASL int scan()//菜单显示函数 int scan2(){//菜单显示函数

三、详细设计

1、数据结构设计 链地址法:

typedef struct node{

int number;

char address[size]; char name[size]; struct node *next;

}newnode,*anode;

开放定址法: typedef struct node2{

int number2; char name2[size]; int v;//冲突次数

}newnode2,*anode2;

anode2 q;//信息录入数组

int i;//判断存储空间

int j;//表长

}newnode3,*anode3;

2、算法分析与实现

开放定址法

添加记录(以用户名为关键字)

使用开放定址法,以用户名为关键字,添加记录当输入的电话号码不为-1时,输入姓名(英文),把姓名的第一个英文字母(char型)强制转换为整型e,

再使用开放定址法获取哈希地址,增量取用线性探测再散列法。

四、运行结果和调试分析

测试数据:

姓名住址电话号码Fu 云南19

Yuan 河北14

Dong 山西23

链地址法:

用户名为关键字建立散列表:ASL=1

以号码为关键字建立散列表:ASL=1

开放定址法:

用户名为关键字建立散列表:ASL=1

以号码为关键字建立散列表:ASL=1

运行结果图。

1.选用建表方法,初始化散列表。——————————链地址法

4. 计算ASL——————————链地址法

相关文档
最新文档