版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、哈希表存储的电话号码查询设每个记录有以下数据项:用户名、电话、地址;从键盘输入各记录,以电话号码为关键字建立哈希表;采用链地址法方法解决冲突;能够查找并显示给定电话号码的相关记录。#include #include #include #include #define MAX_LEN 60/ 学生信息类class Studentprivate:char _nameMAX_LEN;/ 姓名char _phoneMAX_LEN;/ 电话char _addrMAX_LEN;/ 地址public:Student();const char* getName() ; /变量不允许被改变const char*
2、 getPhone();const char* getAddr();void setName(const char* name);void setPhone(const char* phone);void setAddr(const char* addr);Student:Student()memset(_name,0,MAX_LEN);memset(_phone,0,MAX_LEN);memset(_addr,0,MAX_LEN);const char* Student:getName()return _name;const char* Student:getPhone()return _p
3、hone;const char* Student:getAddr()return _addr;void Student:setName(const char* name)strcpy(this-_name,name);void Student:setPhone(const char* phone)strcpy(this-_phone,phone);void Student:setAddr(const char* addr)strcpy(this-_addr,addr);/哈希节点struct LISTNODEint n_value ;/ int count;/ 保存的个数char _phone
4、MAX_LEN ;/ keyStudent _info;/ 学生信息LISTNODE * p_next ;/ 下一个结点的地址;/哈希表结构定义struct HASHTABLEint n_tablesize ;LISTNODE * p_node ;/ 哈希表管理类class CHashTableManageprivate:HASHTABLE *_hashTable;/ 哈希首地址public:CHashTableManage();bool hashtable_init( int table_size);/初始化void hashtable_clear ();/清理/拿到这个字符串存在的节点LI
5、STNODE * hashtable_find( char *phone);/ 插入一个结点int hashtable_insert (LISTNODE * pNode);protected:LISTNODE * CHashTableManage:hashtable_newnode( LISTNODE* str);/哈希函数/得到字符串在哈希表中的位置int hashtable_hash (char* str, int tablesize);/CHashTableManage:CHashTableManage(): _hashTable(0)/初始化bool CHashTableManage:
6、hashtable_init( int table_size)/表头HASHTABLE * head_ht ;head_ht = (HASHTABLE *)new( HASHTABLE );if(head_ht = NULL)return false ;/元素总数尽量素数保证mod尽可能均匀head_ht-n_tablesize = table_size;/链表队列一条链为一个散列位置head_ht-p_node = (LISTNODE *) new inttable_size;/每一个散列链初始化for(int i=0; in_tablesize; i+)head_ht-p_nodei =
7、NULL;_hashTable = head_ht;return true ;/清理void CHashTableManage:hashtable_clear () /0if(_hashTable = NULL)return;/每一个散列链freefor(int i=0; in_tablesize; i+)if(_hashTable -p_node i)LISTNODE *list = _hashTable-p_nodei;/当前链表不空while(list != NULL)/取得下一个LISTNODE *tempnode = list- p_next;/free当前位置if(list )de
8、lete list ;/指向下一个list = tempnode ;/链表队列freeif(_hashTable -p_node)delete(_hashTable -p_node);_hashTable-p_node = NULL;/哈希头节点freeif(_hashTable )delete(_hashTable );_hashTable = NULL ;/拿到这个字符串存在的节点LISTNODE * CHashTableManage:hashtable_find( char *phone) /2/哪一条链表LISTNODE * list = NULL;if(_hashTable = NU
9、LL)return NULL ;int pos = hashtable_hash(phone,_hashTable- n_tablesize);list = _hashTable -p_nodepos;/链表查找while(list != NULL)if(strcmp(phone, list-_phone) = 0) /比较break;list = list -p_next;return list ;/ 插入一个结点int CHashTableManage:hashtable_insert (LISTNODE * pNode) /1int pos = hashtable_hash( pNode
10、-_phone,_hashTable -n_tablesize);LISTNODE *list_pos = _hashTable- p_nodepos;/假如存在 计数器+1for(;list_pos!=NULL;list_pos=list_pos-p_next)if(strcmp(list_pos-_phone,pNode-_phone) = 0& strcmp(pNode-_info.getPhone(),list_pos-_info.getPhone() = 0& strcmp(pNode-_info.getAddr(),list_pos-_info.getAddr() = 0& str
11、cmp(pNode-_info.getName(),list_pos-_info.getName() = 0)list_pos-count+;return pos;/不存在LISTNODE *node = hashtable_newnode(pNode);node-p_next = _hashTable- p_nodepos;_hashTable- p_nodepos = node;return pos ;/哈希函数/得到字符串在哈希表中的位置int CHashTableManage:hashtable_hash (char* str, int tablesize)unsigned int h
12、ash_val = 0;while(*str != 0)hash_val += (hash_val p_next = NULL;insert_node-count = 1;strcpy(insert_node -_phone, str-_info.getPhone();memcpy(&insert_node-_info,&str-_info,sizeof(str-_info);return insert_node ;/ 主函数int main (void)CHashTableManage _manage;/初始一个个链表的哈希表 size最好为素数/head = hashtable_init
13、(1001);if(!_manage.hashtable_init(1001)cout 哈希初始化失败 endl;return 1;cout * endl;cout endl; cout endl;cout endl;cout endl;cout 按任意键开始 endl;cout * endl;getchar();while(1)system(cls);cout . endl;cout . 添加学生信息 . endl;cout . 查询学生信息 . endl; cout . 退出 . endl; cout . endl;char key = getchar();switch(key)case
14、1:LISTNODE info;char bufMAX_LEN;memset(&info,0,sizeof(info);cout - 请输入学生信息姓名 buf;info._info.setName(buf);cout - 请输入学生信息电话 buf;info._info.setPhone(buf);cout - 请输入学生信息地址 buf;info._info.setAddr(buf);strcpy(info._phone,info._info.getPhone();_manage.hashtable_insert(&info);cout - 恭喜 写入成功! 按任意键确认 endl;getchar();break;case 2:cout - 请输入查询条件电话 buf;/找到这个字符串具体位置LISTNODE * node = _manage.hashtable_find(buf);if(node = 0)cout - 没有查询到相关数据! 按任意键确认 endl;elsecout - 查询到以下数据 - endl;while(node != NULL)cout - endl;cout - 相同信息数:count endl;cout - 学生姓名 :_info.getName() endl;cout - 电话号码 :_info.get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版装配式厂房买卖合同范本3篇
- 二零二五年方木产业园区建设与购销合作合同3篇
- 二零二五版快递物流服务合同汇编3篇
- 二零二五年度空压机设备零配件供应与仓储合同3篇
- 二零二五年文化活动兼职主持人聘任合同范本2篇
- 2025版快递驿站快递服务场地租赁及配套设施合同模板2篇
- 二零二五年无线基站场地天面租赁及维护合同3篇
- 二零二五版能源企业安全生产责任合同3篇
- 二零二五版建筑工程混凝土材料绿色认证合同文本2篇
- 二零二五年知识产权贷款抵押担保合同标准版2篇
- 团队成员介绍
- 水泵行业销售人员工作汇报
- 《流感科普宣教》课件
- 离职分析报告
- 春节家庭用电安全提示
- 医疗纠纷预防和处理条例通用课件
- 厨邦酱油推广方案
- 乳腺癌诊疗指南(2024年版)
- 高三数学寒假作业1
- 保险产品创新与市场定位培训课件
- (完整文本版)体检报告单模版
评论
0/150
提交评论