问题描述:按电话号码和用户名为关键字,建立散列表。实现查找用户和显示用户信息。本案例在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. MATLAB读取文本文件----textread
  2. 万字长文带你一览ICLR2020最新Transformers进展(上)
  3. 已经无法合并还报请合并git_Git不能自动合并怎么解决?
  4. 读书笔记011:《伤寒论》- 手厥阴心包经
  5. 利用ORB/AKAZE特征点进行图像配准
  6. 转: SQL Server Analysis Service中Cube的结构
  7. python怎么背景实现循环_在Python的一段程序中如何使用多次事件循环详解
  8. 人工智能一种现代的方法 --第2章 智能Agent
  9. 车联网在智慧城市中的发展与应用
  10. 什么是webservice
  11. AVC编码中的规格 :High、Baseline、Main什么意思?还有High@L3.0、High@L4.0、High@L5.1等
  12. 五一南京-无丝竹无案牍
  13. 05 CSS从原理到熟练 - 1
  14. element实现el-progress线形进度条渐变色
  15. 网络基础知识之IP与子网掩码和网络地址
  16. 计算机断电无法启动不了系统,电脑突然断电,小编教你电脑突然断电后开不了机怎么办...
  17. DAPI溶液|CAS:28718-90-34’,6-二脒基-2-苯基吲哚二盐酸盐
  18. 学生喂养动物(猫,狗,鸟)
  19. 福禄克DTX-1800线缆认证测试仪,为什么福禄克建议1年校准1次?
  20. xStream:Security framework of XStream not initialized, XStream is probably vulnerable

热门文章

  1. 查看/统计 代码行数
  2. matlab常用函数
  3. word多级标题下一级和上一级没有关联上
  4. 商城系统订单超时自动取消解决方案
  5. C++程序设计语言(特别版)pdf
  6. 主动轮廓线模型Snake模型简介openCV中cvSnakeImage()函数代码分析
  7. 机器学习算法——神经网络4(RBF神经网络)
  8. rbf神经网络python预测代码_RBF神经网络预测
  9. Multisim 10软件介绍
  10. CAM350 12.1免费下载