散列表的设计与实现

散列表的设计与实现

ID:19688733

大小:50.50 KB

页数:9页

时间:2018-10-05

散列表的设计与实现_第1页
散列表的设计与实现_第2页
散列表的设计与实现_第3页
散列表的设计与实现_第4页
散列表的设计与实现_第5页
资源描述:

《散列表的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、散列表的设计与实现一、作业要求:【问题描述】设计散列表实现电话号码查找系统。【基本要求】1)设每个记录有下列数据项:电话号码、用户名、地址;2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;3)采用一定的方法解决冲突;4)查找并显示给定电话号码的记录;5)查找并显示给定用户名的记录。【进一步完成内容】1)系统功能的完善;2)设计不同的散列函数,比较冲突率;3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。二、设计分析:用散列表实现电话号码查找系统,采用姓名和电话号码为关键字,动态

2、分配存储空间,根据姓名和电话号码分别进行哈希排序建立不同的数组分别存放姓名和电话号码,能实现电话号码信息的插入、删除、查找、保存等操作,采取线性探测法解决冲突。三、逻辑结构:电话号码查找系统,逻辑上应当是每个结点含有一个人所有的信息,在查找的时候可以通过不同的查找方式对不同的信息进行查找,人和人之间的关系应当是独立的,添加结点的时候对每个人由系统分配新的结点,但是不同人结点中所包含的信息则具有相同的格式,比如每个结点中的姓名、地址、电话号码都具有相同的格式,在进行物理存储的时候可以建立相同的数组来放置同类信息。四、存储结构:所

3、设计的程序采用数组存放各类相同的信息,先建立数组进行初始化,再把不同的结点通过哈希排序以及线性探测的结果存放入对应的数组,建立的数组有两个,分别以姓名和电话号码建立哈希表,对信息进行存储,以后的各种操作,比如查找,散列等都建立在相应的哈希表的基础上,各个信息之间通过链表相连,在查找的时候可以充分利用哈希表查找的快速性,形象化的存储结构如下图:9一、算法设计:二、实现代码:#include#include#include#include#include

4、#defineNULL0unsignedintkey;unsignedintkey1;unsignedintkey2;int*p;structnode//建节点{charname[8],address[20];charnum[11];node*next;};typedefnode*pnode;typedefnode*mingzi;node**nam;node*a;usingnamespacestd;//使用名称空间hash(charnum[11])//建表,以人的电话号码为关键字,建立相应的散列表若哈希地址发

5、生冲突,进行冲突处理。{inti=3,j;key1=(int)num[2];while(num[i]!=NULL){9key1+=(int)num[i];i++;}key1=key1%20;for(j=0;j<20;j++)//线性探测法解决冲突{key=(key1+j)%20;if(phone[key]->num=="")break;}return(key);}hash2(charname[8])//建表,以人的姓名为关键字,建立相应的散列表//若哈希地址发生冲突,进行冲突处理{inti=1,j;key2=(int)name

6、[0];while(name[i]!=NULL){key2+=(int)name[i];i++;}key2=key2%20;for(j=0;j<20;j++)//线性探测法解决冲突{key=(key2+j)%20;if(phone[key]->name=="")break;}return(key);}node*input()//输入节点{node*temp;temp=newnode;temp->next=NULL;cout<<"输入姓名:"<>temp->name;cout<<"输入地址:"<

7、in>>temp->address;cout<<"输入电话:"<>temp->num;9returntemp;}intapend()//添加节点{node*newphone;node*newname;newphone=input();newname=newphone;//newphone->next=NULL;//newname->next=NULL;newphone->next=phone[hash(newphone->num)]->next;phone[hash(newphone->num)]->nex

8、t=newphone;newname->next=nam[hash2(newname->name)]->next;nam[hash2(newname->name)]->next=newname;return0;}voidcreate()//新建电话号码数组{inti;phon

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。