设计散列表实现电话号码查找系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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——————————链地址法