哈希表的设计与实现

时间:2025-04-05

哈希表c语言

哈希表的设计与实现

一.正文:

设计哈希表实现电话号码查询系统。基本要求:

1、设每个记录有下列数据项:电话号码、用户名、地址;

2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;

3、采用再哈希法解决冲突;

4、查找并显示给定电话号码的记录;

5、查找并显示给定用户名的记录。

二.思路:

利用哈希表实现电话号码的查询,利用数据链实现对电话记录的增加和删除。

三.定义函数:

Typedef struct

{

Keytype key;

InfoType date;

Int count;

}

HashTable[MaxSize];

四.概要设计

1.数据结构:

struct Hash

{

int currentSize;

struct HashItem

{

int data;

int tag;

}

table[TableSize];

};

2.基本操作:

void Initiate(struct Hash *h);

//初始化操作;

int FindPos(struct Hash h,int x);

哈希表c语言

//查找一个数据元素的操作;

int GetValue(struct Hash h,int i);

//获取一个数据元素的操作;

int Insert(struct Hash *h,int x);

//插入一个数据元素的操作;

int Delete(struct Hash *h,int x);

//删除一个数据元素的操作;

void Print(struct Hash h);

//列表显示数据元素的操作;

void Clear(struct Hash *h)

//置空全部哈希表空间的操作;

五.流程图:

哈希表c语言

六、测试数据: 1、输入0——>hu--->shandong--->13651689952

2、输入0---->xiao--->shandong--->123456789

3、输入1--->7--->13651689952

4、输入1--->8--->hu

5、输入2

6、输入3

7、输入5

8、输入4

9、输入6

哈希表c语言

七.程序源代码:

#include<iostream>

#include<string>

#include<fstream>

using namespace std;

#define NULL 0

unsigned int key;

unsigned int key2;

int *p;

struct node //建节点

{

char name[8],address[20];

char num[11];

node * next;

};

typedef node* pnode;

typedef node* mingzi;

node **phone;

node **nam;

node *a;

void hash(char num[11]) //哈希函数

{

int i = 3;

key=(int)num[2];

while(num[i]!=NULL)

{

key+=(int)num[i];

i++;

}

key=key%20;

}

void hash2(char name[8]) //哈希函数

{

int i = 1;

key2=(int)name[0];

while(name[i]!=NULL)

哈希表c语言

{

key2+=(int)name[i];

i++;

}

key2=key2%20;

}

node* input() //输入节点

{

node *temp;

temp = new node;

temp->next=NULL;

cout<<"输入姓名:"<<endl;

cin>>temp->name;

cout<<"输入地址:"<<endl;

cin>>temp->address;

cout<<"输入电话:"<<endl;

cin>>temp->num;

return temp;

}

int apend() //添加节点

{

node *newphone;

node *newname;

newphone=input();

newname=newphone;

newphone->next=NULL;

newname->next=NULL;

hash(newphone->num);

hash2(newname->name);

newphone->next = phone[key]->next;

phone[key]->next=newphone;

newname->next = nam[key2]->next;

nam[key2]->next=newname;

return 0;

}

void create() //新建节点

{

int i;

phone=new pnode[20];

for(i=0;i<20;i++)

{

哈希表c语言

phone[i]=new node;

phone[i]->next=NULL;

}

}

void create2() //新建节点

{

int i;

nam=new mingzi[20];

for(i=0;i<20;i++)

{

nam[i]=new node;

nam[i]->next=NULL;

}

}

void list() //显示列表

{

int i;

node *p;

for(i=0;i<20;i++)

{

p=phone[i]->next;

while(p)

{

cout<<p->name<<'_'<<p->address<<'_'<<p->num<<endl;

p=p->next;

}

}

}

void list2() //显示列表

{

int i;

node *p;

for(i=0;i<20;i++)

{

p=nam[i]->next;

while(p)

{

cout<<p->name<<'_'<<p->address<<'_'<<p->num<<endl;

哈希表c语言

p=p->next;

}

}

}

void find(char num[11]) //查找用户信息

{

hash(num);

node *q=phone[key]->next;

while(q!= NULL)

{

if(strcmp(num,q->num)==0)

break;

q=q->next;

}

if(q)

cout<<q->name<<"_" <<q->address<<"_"<<q->num<<endl; else cout<<"无此记录"<<endl;

}

void find2(char name[8]) //查找用户信息

{

hash2(name);

node *q=nam[key2]->next;

while(q!= NULL)

{

if(strcmp(name,q->name)==0)

break;

q=q->next;

}

if(q)

cout<<q->name<<"_" <<q->address<<"_"<<q->num<<endl; else cout<<"无此记录"<<endl;

}

void save() //保存用户信息

{

int i;

node *p;

for(i=0;i<20;i++)

{

p=phone[i]->next;

哈希表c语言

while(p)

{

fstream iiout("out.txt", ios::out);

iiout<<p-> …… 此处隐藏:1868字,全部文档内容请下载后查看。喜欢就下载吧 ……

哈希表的设计与实现.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219