哈希表的设计与实现

时间:2025-07-07

哈希表的设计与实现

课程设计任务书

学生姓名: 专业班级:

指导教师: 工作单位:

题 目: 哈希表的设计与实现

初始条件:

针对某个集体(比如你所在的班级)中的“人名”设计并实现一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。

(1)假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的

上限为2。

(2)哈希函数用除留余数法构造

(3)用伪随机探测再散列法处理冲突。

(4)测试用例见严蔚敏《数据结构习题集(C语言版)》p166。

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

课程设计报告按学校规定格式用A4纸打印(书写),并应包含如下内容:

1. 问题描述

简述题目要解决的问题是什么。

2. 设计

存储结构设计、主要算法设计(用类C/C++语言或用框图描述)、测试用例设计;

3. 调试报告

调试过程中遇到的问题是如何解决的;对设计和编码的讨论和分析。

4. 经验和体会(包括对算法改进的设想)

5. 附源程序清单和运行结果。源程序要加注释。如果题目规定了测试数据,则运行结果要包含这

些测试数据和运行输出。

说明:

1. 设计报告、程序不得相互抄袭和拷贝;若有雷同,则所有雷同者成绩均为0分。

2. 凡拷贝往年任务书或课程设计充数者,成绩一律无效,以0分记。

时间安排:

1、第19周完成。

2、6月30日下午-7月1日在实验中心检查程序、交课程设计报告、源程序(U盘)。

指导教师签名: 2011年6月22日

哈希表的设计与实现

系主任(或责任教师)签名: 年 月 日

1问题描述

1.1问题描述

针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长

度不超过R,完成相应的建表和查表程序。

1.2基本要求

假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查

找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列发处理冲突。

2设计

2.1存储结构设计

typedef struct

{ char *py; //名字的拼音

int k; //拼音所对应的整数

}NAME;

typedef struct //哈希表

{ char *py; //名字的拼音

int k; //拼音所对应的整数

int si; //查找长度

}HASH;

2.2主要算法设计

2.2.1 姓名(结构体数组)初始化

名字以拼音的形式够成字符串,将字符串的各个字符所对应的ASCII码相加,所得的

整数做为哈希表的关键字。

void InitNameList()

{ char *f;

int r,s0,i;

NameList[0].py="zhouyulin";

NameList[1].py="chengjianfeng";

NameList[2].py="qinxudong";

哈希表的设计与实现

NameList[3].py="fangxin";

NameList[4].py="yangzongcheng";

NameList[5].py="tangxuewei";

NameList[6].py="sunjie";

NameList[7].py="chentao";

NameList[8].py="chendehui";

NameList[9].py="xubiao";

NameList[10].py="chenxiaokun";

NameList[11].py="xuyulin";

NameList[12].py="huwei";

NameList[13].py="yehanfan";

NameList[14].py="changzhen";

NameList[15].py="zhoupenghui";

NameList[16].py="liweipeng";

NameList[17].py="gengguangzhen";

NameList[18].py="weikaikai";

NameList[19].py="leiyutian";

NameList[20].py="wangwei";

NameList[21].py="liumingxi";

NameList[22].py="nvchunqiu";

NameList[23].py="congxiaofei";

NameList[24].py="weitaifei";

NameList[25].py="guijie";

NameList[26].py="huangliang";

NameList[27].py="mahuizhi";

NameList[28].py="huye";

NameList[29].py="shengxianqin";

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

{ s0=0;

f=NameList[i].py;

for(r=0;*(f+r)!='\0';r++) */将字符串的各个字符所对应的ASCII码相加,所得的整数做

为哈希表的关键字*/

s0=*(f+r)+s0;

NameL

ist[i].k=s0;

}

}

2.2.2 建立哈希表

(1) 用除留余数法构建哈希函数

(2) 用伪随机探测再散列法处理冲突

void CreateHashList()

哈希表的设计与实现

{ int i;

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

{ HashList[i].py="";

HashList[i].k=0;

HashList[i].si=0;

}

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

{ int sum=0;

int adr=(NameList[i].k)%M; //哈希函数

int d=adr;

if(HashList[adr].si==0) //如果不冲突

{ HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else //冲突

{ do

{ d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

2.2.3查找哈希表

在哈希表中进行查找,输出查找的结果 …… 此处隐藏:6553字,全部文档内容请下载后查看。喜欢就下载吧 ……

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

    精彩图片

    热门精选

    大家正在看

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

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

    支付方式:

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

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