问题描述:按电话号码和用户名为关键字,建立散列表。实现查找用户和显示用户信息。本案例在vs2012编译通过。

1.头文件 Hsah.h

#pragma once
#include<iostream>
using namespace std;
struct Node
{
char *name; //姓名
char *address;//地址
char *num;//电话
Node *pNext;
};

class Hsah
{
private:
Node *phone;//指针存储散列表,链地址法
Node *nam;

public:
Hsah();
~Hsah(); 
int hashphone(char * num); //电话号码散列表函数
int hashname(char * name); //姓名的散列表函数
Node * push(char *pname,char *add,char *pnum);
void append(char *pname,char *add,char *pnum);//添加记录
Node * findnum(char *pnum);//按号码查找
Node * findname(char *pname);//按姓名查找
void showphone();
void showname();
};

2.Hsah.cpp文件

#include "Hsah.h"

Hsah::Hsah()
{
this->phone=new Node [20]; //分配数组空间存储哈希表
this->nam=new Node [20];
for(int i=0;i<20;i++)   // 将指针滞空
{
this->phone[i].pNext=nullptr;
this->nam[i].pNext=nullptr;
}
}

Hsah::~Hsah()
{
delete [] phone;
delete [] nam;
}

int Hsah::hashphone(char * num) //电话号码散列表函数
{
if(num==nullptr)
{
}
int key=0;
while(*num!='\0')
{
key+=(*num)-48 ;
num++;
}

return key%20;
}

int Hsah::hashname(char * name) //姓名的散列表函数
{
int key=0;
int i=0;
while(name[i]!=NULL)
{
key+=int(name[i]);
i++;
}
return abs(key%20); //abs函数保证key为正值
}
Node * Hsah::push(char *pname,char *add,char *pnum)//分配存储空间
{
Node *p=new Node;
    int len1 = strlen(pname);
int len2 = strlen(add);
int len3 = strlen(pnum);
p->name=new char[len1+1];
strcpy(p->name,pname);
(p->name)[len1] = '\0';
p->address = new char[len2+1];
strcpy(p->address,add);
(p->address)[len2] = '\0';
p->num=new char[len3+1];
strcpy(p->num,pnum);
(p->num)[len3] = '\0';
p->pNext=nullptr;

return p;
}

void Hsah::append(char *pname,char *add,char *pnum)
{

Node * newphone=new Node;
Node * newname=new Node;
newphone=push(pname,add,pnum);
newname=push(pname,add,pnum);
newphone->pNext=nullptr;
newname->pNext=nullptr;

if(phone[hashphone(pnum)].pNext==nullptr)
{
newphone->pNext=phone[hashphone(pnum)].pNext;
    phone[hashphone(pnum)].pNext=newphone;
}
else
{
Node *p=phone[hashphone(pnum)].pNext;
while(p->pNext!=nullptr)
{
p=p->pNext;
}
p->pNext=newphone;
}

if(nam[hashname(pname)].pNext==nullptr)
{
newname->pNext=nam[hashname(pname)].pNext;
nam[hashname(pname)].pNext= newname;
}
else
{
Node *p=nam[hashname(pname)].pNext;
while(p->pNext!=nullptr)
{
p=p->pNext;
}
p->pNext=newname;
}  
}

Node * Hsah::findnum(char *pnum)//按号码查找
{
Node *p=phone[hashphone(pnum)].pNext;
while(p!=nullptr)
{
if(strcmp(pnum,p->num)==0)
break;
p=p->pNext;

if(p)
{
cout<<p->name<<" "<<p->num<<" "<<p->address<<endl;
}
else
{
cout<<"没有此人记录!"<<endl;
return nullptr;
}

return p;
}

Node * Hsah::findname(char *pname)//按姓名查找
{
Node *p=nam[hashname(pname)].pNext;
while(p!=nullptr)
{
if(strcmp(pname,p->name)==0)
break;
p=p->pNext;
}
if(p)
{
cout<<p->name<<" "<<p->num<<" "<<p->address<<endl;
}
else
{
cout<<"没有此人记录!"<<endl;
return nullptr;
}
return p;
}

void  Hsah::showphone()
{
for(int i=0;i<20;i++)
{
if(phone[i].pNext==nullptr)
{
continue ;
}
else
{
Node *p=phone[i].pNext; //还是phone[i].pNext部位空
while(p)
{

cout<<"姓名:"<<p->name<<endl;
cout<<"电话号码:"<<p->num<<endl;
cout<<"住宅地址:"<<p->address<<endl;

p = p->pNext;
}
}
}

}
 
void  Hsah::showname()
{
for(int i=0;i<20;i++)
{
if(nam[i].pNext==nullptr)
{
continue ;
}
else
{

Node *p=nam[i].pNext; //还是nam[i].pNext部位空
while(p)
{
cout<<"姓名:"<<p->name<<endl;
cout<<"电话号码:"<<p->num<<endl;
cout<<"住宅地址:"<<p->address<<endl;
p = p->pNext;
}

}

}
cout<<"请按任意键继续:";
cin.get();
}

3.main函数测试

#include"Hsah.h"
int main()
{
Hsah hs;
  // 添加记录
hs.append("小东","中关村22号","15675650786");
hs.append("小智","下家村58号","15685638912");
        hs.append("小明","详细28号","14226048511") ;
hs.append("小南","月月光45号","13226856411") ;
        hs.append("小北","明朗小8号","13205501111") ;
  
cout<<endl;
//按号码查找
hs.findnum("15675650786");
hs.findnum("15685638912");

hs.findnum("17584511");
cout<<endl;

//按姓名查找
hs.findname("小明");
hs.findname("小南");

hs.findname("小");

cout<<endl;

//显示列表
hs.showphone();
cout<<endl;
hs.showname();
 
system("pause");
return 0;
}

运行结果:

注:该博客为本人第一次书写,还有很多不足,后续将一一补齐,如有侵犯到某人的权利,请联系本人,本人立马删除!

简易散列表实现电话号码查询系统相关推荐

  1. 散列表应用---电话号码查询系统

    问题介绍 设计电话号码查询系统 基本要求 1.设每个记录有下列数据项: 电话号码.用户名.地址: 2.从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表: 3.采用合适的方法解决冲突: 4.查 ...

  2. 【Java Swing/散列表】散列表实现电话号码查找系统——问题汇总分享

    说明:本文为我在做课设时遇到的问题汇总,解决方法多数来自网络,因深感到处搜索解决方法不易,所以做成汇总.因搜索时没有记录每个答案来源网站,如有侵权,请联系我.感谢无私分享的每一个人. 题目:设计散列表 ...

  3. C/C++电话号码查询系统

    C/C++电话号码查询系统 散列表实现电话号码查询系统,语言采用C/C++. 一.设计任务 1.目的:设计并实现一个电话号码查询系统. 2.要求: (1)采用散列表(长度5)进行存储,散列函数选择除留 ...

  4. 设计散列表实现通讯录查找系统_[源码和文档分享]利用哈希表实现电话号码查询系统...

    第一章 需求分析 1.1 问题描述 设计一个电话号码查询系统,为来访的客⼈提供各种信息查询服务. 1.2 基本要求 设计每个记录有下列数据项:电话号码.用户名.地址 从键盘输入个记录,分别以电话号码和 ...

  5. java编程电话号码查询_java课程设计电话号码查询系统(15页)-原创力文档

    山东建筑大学 Java 课程设计报告 设计题目 电话号码查询系统 学生姓名黄瑜 学号 2010121187 专业班级信计101 指导教师 王文 1 1 1.设计目的 1.通过JAVA 课程设计,使大家 ...

  6. 哈希表实现电话号码查询系统(c++)

    问题描述:设计哈希表实现电话号码查询系统,实现下列功能: (1) 假定每个记录有下列数据项:电话号码.用户名.地址. (2) 一是从数据文件old.txt(自己现行建好)中读入各项记录,二是由系统随机 ...

  7. 电话号码查询系统(数据结构之哈希表)

    哈希表 哈希表(Hash Table)是一种根据关键字直接访问内存存储位置的数据结构.通过哈希表,数据元素的存放位置和数据元素的关键字之间建立起某种对应关系,建立这种对应关系的函数称为哈希函数. 1. ...

  8. 数据结构个人电话号码查询系统实验报告

    实验目的及要求 目的:通过设计一个<个人电话号码查询系统>,进一步熟悉一些二叉树的概念.以及基本知识和技能,利用所学的基本知识和技能解决简单的面向对象的程序设计问题.实现根据用户输入的信息 ...

  9. 编写电话号码查询系统

    编写电话号码查询系统 一.项目简介 设计一个通讯录管理软件,做到能够增加组.删除组. 修改组.查询好友.加好友.修改好友,删除好友,退出. (1) 通讯录的每一条信息包括姓名,手机,电话,性别,分组: ...

  10. 输入手机号查询信息C语言,简单个人电话号码查询系统.doc

    课程设计任务书 2011-2012学年第1学期 电子与信息工程系 专业 班级 课程设计名称: 数据结构课程设计 设计题目: 简单个人电话号码查询系统 完成期限:自2012 年 1月2日至2012 年 ...

最新文章

  1. 从控制器到驱动器的WD——硬盘巨头启示录之西数篇
  2. 如何打造一个经常宕机的业务系统?
  3. mongodb的监控与性能优化
  4. mac mysql 初始密码_mac下mysql安装后修改默认密码
  5. caffe-windows10-matlab2014a安装配置6个问题
  6. 一台服务部署多个tomcat注意事项
  7. 恒企自考_自考,一个月时间要怎么复习?
  8. Pentium Pro架构/流水线及其优化 (3) - 指令流水线/乱序执行核/高速缓存/分支预测/指令预取
  9. 适合程序员的健身方法(转)
  10. html的字号txt的制作,font 文本颜色 字体 大小标签
  11. IOS 创建渐变图层
  12. js 获取元素文本_JS中获取元素属性的8大方法
  13. Bulma CSS - 简介
  14. Android规范写法
  15. int和Integer有什么区别
  16. 医疗物联网七大应用场景案例解析
  17. (三)Android系统启动流程
  18. win32简单只读文件程序
  19. windows 剪贴板监控
  20. MySQL数据查询之多表查询

热门文章

  1. CRM——销售与客户
  2. KL散度、JS散度以及交叉熵对比
  3. oracle11g64位怎么用sql,Oracle11g64位下使用PLSQL
  4. 几个极速版自动阅读项目的autojs脚本
  5. 第7章 EL表达式和JSTL
  6. Python爬虫之一:十几行代码下载王者荣耀所有皮肤
  7. Word VBA中读取Excel表格中的数据
  8. Word VBA查找表格单元格的第一段
  9. Spring下载文件出现:UT010029: Stream is closed
  10. 服务器 '' 上的 MSDTC 不可用。