数据库课程设计——哈希表

数据库课程设计——哈希表
数据库课程设计——哈希表

序号:

题目哈希表设计_________

学院计算机学院

专业网络工程

年级班别 11级(3)班

学号

学生姓名

指导教师杨劲涛

思路理论答辩难度系数代码总成绩

2013 年 6 月28 日

一、需求分析

1.任务和要求

(1)针对某个集体中的人名设计一个哈希表,使得平均查找长度不超过R,完成相应的建立和查表程序。

(2)人名为汉语拼音形式,最长不超过19个字符(如:庄双双zhuangshuangshuang)。

(3)假设待填入哈希表的人名有30个,平均查找长度的上限为2。哈希表用除留余数法构造,用伪随机探测在散列法处理冲突。

(4)在输入人名过程中能自动识别非法输入,并给与非法输入的反馈信息要求重新输入。

(5)查找成功时,显示姓名及关键字,并计算和输出查找成功的平均查找长度

2.运行环境

(1)WINDOW7系统

(2)Visual Studio 2012编译环境

3.开发工具

C++语言

二、概要设计

1.设计思路

(1)创建姓名表和哈希表的结构

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

○1用除留余数法构件哈希函数

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

(3)查找哈希表:在哈希表中进行查找,输出查找的结果和关键字,并输出查找成功的平均查找长度。

(4)显示哈希表

2.主要数据结构和函数

定义结构体typedef struct HashList创建哈希表

定义函数InitNameList()来对哈希表初始化

定义函数CreateHashList()建立哈希表

定义函数DisplayNamelist()显示姓名表

定义函数DisplayHashList()显示哈希表

定义函数FindName()查找输入的名字

定义主函数main()来设计界面和输出

三、详细设计

1.存储结构设计

t ypedef struct //姓名表

{

char *py; //名字的拼音

int m; //拼音所对应的

}NAME;

NAME NameList[HASH_LEN]; //全局定义姓名表

typedef struct //哈希表

{

char *py; //名字的拼音

int m; //拼音所对应的ASCII总和

int si; //查找长度

}HASH;

2.主要算法

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

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

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

/*-----------------姓名(结构体数组)初始化----------------*/

void InitNameList()

{ char *f;

int r,s0,i;

NameList[0].py="caizhilong";//蔡志龙

NameList[1].py="zengxiangjie";//曾祥杰

NameList[2].py="zengzhikun";//曾志坤

NameList[3].py="zengzhipeng";//曾志鹏

NameList[4].py="chenjunhao";//陈俊豪

NameList[5].py="chenqiwei";//陈启伟

NameList[6].py="chenxiaocong";//陈晓聪

NameList[7].py="chenzhaolong";//陈兆龙

NameList[8].py="dingyue";//丁越

NameList[9].py="dujingzhou";//杜径舟

NameList[10].py="duxinjie";//杜信杰

NameList[11].py="heyongjie";//何勇杰

NameList[12].py="houzhengzhi";//候正之

NameList[13].py="huangjinling";//黄锦玲

NameList[14].py="huangjin";//黄劲

NameList[15].py="huangweihao";//黄威豪

NameList[16].py="huangweidong";//黄炜东

NameList[17].py="leizhenju";//雷振炬

NameList[18].py="lizhengxu";//李峥旭

NameList[19].py="linguangsheng";//林广声

NameList[20].py="linyong";//林泳

NameList[21].py="linzhicong"; //林志聪

NameList[22].py="liuhaifeng";//刘海峰

NameList[23].py="lvhuicang";//吕慧苍

NameList[24].py="mashaobin";//马少滨

NameList[25].py="mashuhong";//马书鸿

NameList[26].py="paerhati";//帕尔哈提

NameList[27].py="sunqinying";//孙秦英

NameList[28].py="wangbinbin";//王彬彬

NameList[29].py="wangnanjia";//王南佳

for (i=0;i

{

int s=0;

char *p=NameList[i].py;

for (j=0;*(p+j)!='\0';j++)

s+=toascii(*(p+j));

NameList[i].m=s;

}

}

(2).建立哈希表

/*-----------------------建立哈希表---------------------------------*/

void CreateHashList() //建立哈希表

{

for(i=0;i

{

HashList[i].py="\0";

HashList[i].m =0;

HashList[i].si=0;

}

for(i=0;i

{

int sum=1,j=0;

int adr=(NameList[i].m)%P; //除留余数法 H(key)=key MOD p,p<=m if(HashList[adr].si==0) //如果不冲突,将姓名表赋值给哈希表 {

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

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

HashList[adr].si=1;

}

else //如果冲突

{

while(HashList[adr].si!=0)

{

adr=(adr+d[j++])%HASH_LEN; //伪随机探测再散列法处理冲突

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

}

HashList[adr].m =NameList[i].m; //将姓名表复制给哈希表对应的位置上

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

HashList[adr].si=sum;

}

}

}

void DisplayNamelist() //显示姓名表

{

printf("\n地址 \t\t 姓名 \t\t 关键字\n");

for (i=0;i

printf("%2d %18s \t\t %d \n",i,NameList[i].py,NameList[i].m); }

void DisplayHashList() // 显示哈希表

{

float asl=0.0;

printf("\n\n 地址 \t\t 姓名 \t\t 关键字 \t 搜索长度\n"); //显示的格式 for (i=0;i

{

printf("%2d %18s \t\t %d

\t\t %d\n",i,HashList[i].py,HashList[i].m,HashList[i].si);

asl+=HashList[i].si;

}

asl/=NAME_LEN; //求得ASL

printf("\n\n平均查找长度:ASL(%d)=%f \n",NAME_LEN,asl);

}

(3)查找哈希表

void FindName() //查找

{

char name[20]={0};

int s=0,sum=1,adr;

printf("\n请输入想要查找的姓名的拼音:");

scanf("%s",name);

for (j=0;j<20;j++) //求出姓名的拼音所对应的ASCII作为关键字

s+=toascii(name[j]);

adr=s%P; //除留余数法

j=0;

if(HashList[adr].m==s&&!strcmp(HashList[adr].py,name)) //分3种情况进行判断,并输出超找结果

printf("\n姓名:%s 关键字:%d 查找长度为:

1\n",HashList[adr].py,s);

else if (HashList[adr].m==0)

printf("没有想要查找的人!\n");

else

{

while(1)

{

adr=(adr+d[j++])%HASH_LEN; //伪随机探测再散列法处理冲突

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

if(HashList[adr].m==0)

{

printf("没有想要查找的人!\n");

break;

}

if(HashList[adr].m==s&&!strcmp(HashList[adr].py,name))

{

printf("\n姓名:%s 关键字:%d 查找长度

为:%d\n",HashList[adr].py,s,sum);

break;

}

}

}

}

(4)主函数的设计

void main() //主函数

{

char a;

srand((int)time(0));

for(i=0;i<30;i++) //用随机函数求得伪随机数列d[i](在1

到50之间)

d[i]=1+(int)(HASH_LEN*rand()/(RAND_MAX+1.0));

InitNameList();

CreateHashList();

puts(" 哈希表设计");//显示菜单栏

start:

puts("\n*--------------------菜单栏-----------------------*");

puts(" \t\t\t 1. 显示姓名表");

puts(" \t\t\t 2. 显示哈希表");

puts(" \t\t\t 3. 查找");

puts(" \t\t\t 4. 退出");

puts("*----------------------------------------------------*"); restart:

printf("\n\t请选择:");

scanf("%s",&a);

switch(a) //根据选择进行判断,直到选择退出时才可以退出

{

case '1':

DisplayNamelist();

break;

case '2':

DisplayHashList();

break;

case '3':

FindName();

break;

case '4':

exit(0);

break;

default:

printf("\n请输入正确的选择!\n"); goto restart;

}

goto start;

}

四、调试分析实验截图

1.测试用例

(1)程序运行后显示如下:

(2)显示姓名表(选择1)

(3)显示哈希表(选择2)

平均查找长度小于2,符合题目要求

(4)查找哈希表(选择3)

输入要查找的人的姓名,若存在则显示名字和对应的关键字以及查找长度;若不存在则显示无此记录:

例1:输入想要查找的姓名的拼音:linguangsheng(林广声)

例2:输入想要查找的姓名的拼音:mashuhong(马书鸿)

(5)退出(选择4)

五、用户手册

1.本程序的运行环境为DOS操作系统,执行项目为:Namehash。

2.进入执行程序后,显示的用户界面如下:

3.用户可以根据界面显示选择操作:

选择1:显示姓名表

选择2:显示哈希表

选择3:查找拼音姓名对应的哈希表位置

选择4:退出程序

六、测试结果

输入“caizhilong”

输出“姓名:caizhilong 关键字:1064 查找长度为:1”

输入“zengxiangjie”

输出“姓名:zengxiangjie 关键字:1283 查找长度为:1”输入“zengzhikun”

输出“姓名:zengzhikun 关键字:1101 查找长度为:1”输入“zengzhipeng”

输出“姓名:zengzhipeng 关键字:1193 查找长度为:1”输入“chenjunhao”

输出“姓名:chenjunhao 关键字:1059 查找长度为:1”输入“chenqiwei”

输出“姓名:chenqiwei 关键字:957 查找长度为:1”

输入“chenxiaocong”

输出“姓名:chenxiaocong 关键字:1270 查找长度为:1”输入“chenzhaolong”

输出“姓名:chenzhaolong 关键字:1280 查找长度为:1”输入“dingyue”

输出“姓名:dingyue 关键字:757 查找长度为:1”

输入“dujingzhou”

输出“姓名:dujingzhou 关键字:1095 查找长度为:2”

输入“duxinjie”

输出“姓名:duxinjie 关键字:864 查找长度为:1”

输入“heyongjie”

输出“姓名:heyongjie 关键字:962 查找长度为:1”

输入“houzhengzhi”

输出“姓名:houzhengzhi 关键字:1203 查找长度为:1”

输入“huangjinling”

输出“姓名:huangjinling 关键字:1278 查找长度为:2”输入“huangjin”

输出“姓名:huangjin 关键字:852 查找长度为:1”

输入“huangweihao”

输出“姓名:huangweihao 关键字:1168 查找长度为:1”输入“huangweidong”

输出“姓名:huangweidong 关键字:1280 查找长度为:1”输入“leizhenju”

输出“姓名:leizhenju 关键字:974 查找长度为:2”

输入“lizhengxu”

输出“姓名:lizhengxu 关键字:990 查找长度为:1”

输入“lingguangsheng”

输出“姓名:linguangsheng 关键字:1386 查找长度为:1”输入“linyong”

输出“姓名:linyong 关键字:768 查找长度为:1”

输入“linzhicong”

输出“姓名:linzhicong 关键字:1077 查找长度为:7”

输入“liuhaifeng”

输出“姓名:liuhaifeng 关键字:1052 查找长度为:2”

输入“lvhuicang”

输出“姓名:lvhuicang 关键字:961 查找长度为:1”

输入“mashaobin”

输出“姓名:mashaobin 关键字:946 查找长度为:1”

输入“mashuhong”

输出“姓名:mashuhong 关键字:970 查找长度为:7”

输入“paerhati”

输出“姓名:paerhati 关键字:846 查找长度为:1”

输入“sunqinying”

输出“姓名:sunqinying 关键字:1109 查找长度为:2”

输入“wangbinbin”

输出“姓名:wangbinbin 关键字:1055 查找长度为:1”

输入“wangnanjia”

输出“姓名:wangnanjia 关键字:1054 查找长度为:4”八.附录

源文件Hash.cpp

运行文件Namehash.exe

哈希表的设计与实现 课程设计报告

一: 需求分析 (2) 三: 详细设计(含代码分析) (4) 1.程序描述: (4) 2具体步骤 (4) 四调试分析和测试结果 (7) 五,总结 (9) 六.参考文献; (10) 七.致谢 (10) 八.附录 (11)

一: 需求分析 问题描述:设计哈希表实现电话号码查询系统。 基本要求 1、设每个记录有下列数据项:电话号码、用户名、地址 2、从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表; 3、采用再哈希法解决冲突; 4、查找并显示给定电话号码的记录; 5、查找并显示给定用户名的记录。 6、在哈希函数确定的前提下,尝试各种不同类型处理冲突的方法(至少 两种),考察平均查找长度的变化。 二: 概要设计 进入主函数,用户输入1或者2,进入分支选择结构:选1:以链式方法建立哈希表,选2:以再哈希的方法建立哈希表,然后用户输入用户信息,分别以上述确定的方法分别以用户名为检索以及以以电话号码为检索将用户信息添加到哈希表,.当添加一定量的用户信息后,用户接着输入用户名或者电话号码分别以用户名或者电话号码的方式从以用户名或电话号码为检索的哈希表查找用户信息.程序用链表的方式存储信息以及构造哈希表。 具体流程图如下所示:

三: 详细设计(含代码分析) 1.程序描述: 本程序以要求使用哈希表为工具快速快速查询学生信息,学生信息包括电话号码、用户名、地址;用结构体存储 struct node { string phone; //电话号码 string name; //姓名 string address;//地址 node *next; //链接下一个地址的指针 }; 2具体步骤 1. 要求主要用在哈希法解决冲突,并且至少尝试用两种方法解决冲突,定义两个指针数组存储信息node *infor_phone[MAX]; node *infor_name[MAX];前者以电话号码为关键字检索哈希表中的信息,后者以姓名为关键字检索哈希表中的信息 用链式法和再哈希法解决冲突: int hash(string key) //以姓名或者电话号码的前四位运算结果作为哈{ //希码 int result=1,cur=0,i; if(key.size()<=4) i=key.size()-1; else i=4; for(;i>=0;i--) { cur=key[i]-'0'; result=result*9+cur; } result%=(MOD); return result;

通讯录管理系统的设计与实现精选文档

通讯录管理系统的设计与实现精选文档 TTMS system office room 【TTMS16H-TTMS2A-TTMS8Q8-

大连民族大学 计算机科学与工程学院实验报告 实验题目:1. 学生信息管理系统的设计与实现 2. 暴力算法在旅行商问题中的应用 课程名称:信息系统开发案例 实验类型:□演示性□验证性□操作性□设计性综合性 专业:软件工程班级:144 学生姓名:赵耀学号:30 实验日期:2017年3月6日—4月27日 实验地点:金石滩校区I303机房 实验学时:24学时实验成绩: 指导教师:赵戈

通讯录管理系统的设计与实现 摘要 本项目用C++语言开发了一个简单的通讯录管理系统,该系统能对联系人 信息进行“增删改查”。系统的UI设计基于Windows系统自带的控制台。测试结 果表明该通讯录管理系统可以稳定正确运行,具有较高的可靠性。 关键词:通讯录管理系统;C++语言;Windows 控制台 目录

1.选题的背景和意义 当今时代,计算机已经成为人们生活中不可或缺的一部分,它打破了地域时间限制,改变了人们的工作和生活方式。人们之间的联系越来越便捷,这就使得要经常与很多人保持着联系,而单纯依靠人脑已经很难记住所有人的联系方式还有其各做附加信息。通讯录系统能方便用户的需求,满足用户迅速、准确的查找修改或者删除联系人信息,把各个联系人信息以文件保存。本文介绍了c++编写简易通讯录管理:系统的分析,功能模块的设计,系统的流程图及运行界面。此系统的主要管理的信息由:联系人的姓名、性别、电话号码,加深对c++语言程序设计的理解,提高算法设计的能力,锻炼编程的能力。用c 语言编程一个通讯录管理系统软件,要求能实现通讯录管理系统中的增加信息,删除信息,显示通讯里的所有信息,按名字查询信息,保存通讯录,退出系统。。 2.需求分析 用例图 通讯录管理系统的用例图如下图所示:

哈希表实验报告完整版

实验报告 姓名:学号: 1.实验题目 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。 基本要求:假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 2.需求分析 本演示程序用VC编写,完成哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 输出形式:地址,关键字,收索长度,H(key),拼音 3.概要设计 typedef struct NAME typedef struct hterm void InitNameList() void CreateHashList() void FindList() void Display() int main() 4.详细设计 #include #include #include

#define HASH_LEN 50 #define M 47 #define NAME_NO 8 typedef struct NAME { char *py; //名字的拼音 int k; //拼音所对应的整数}NAME; NAME NameList[HASH_LEN]; typedef struct hterm //哈希表{ char *py; //名字的拼音 int k; //拼音所对应的整数int si; //查找长度 }HASH; HASH HashList[HASH_LEN]; void InitNameList() { NameList[0].py="houxinming"; NameList[1].py="abc"; NameList[2].py="defdgf"; NameList[3].py="zhangrji"; NameList[4].py="jiaxin"; NameList[5].py="xiaokai"; NameList[6].py="liupeng"; NameList[7].py="shenyonghai";

数据结构课程设计哈希表设计问题复习过程

数据结构课程设计哈希表设计问题

目录 1 前言 (1) 2 需求分析 (1) 2.1 任务和要求 (1) 2.2 运行环境 (1) 2.3 开发工具 (1) 3 分析和设计 (2) 3.1 系统分析及设计思路 (2) 3.2 主要数据结构及算法 (2) 3.3 函数流程图 (2) (1)哈希表的创建及初始化流程图 (2) 5 课程设计总结 (13) 5.1 程序运行结果或预期运行结果 (13) 说明:输入的数为30个姓的拼音,查找的为“pan”,输出的如上图所示。 (14) 5.2 设计结论 (15) 参考文献 (15) 致谢 (15)

1 前言 从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。学习、掌握C语言是每一个计算机技术人员的基本功之一。 根据本次课程设计的要求,我设计小组将编写一个C语言程序来处理哈希表问题,通过这个程序,将针对自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 2 需求分析 2.1 任务和要求 针对自己的班集体中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。 要求:假设人名为中国姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用链表法处理冲突。 2.2 运行环境 (1)WINDOWS2000/XP系统 (2)Visual C++ 6.0编译环境或TC编译环境 2.3 开发工具 C语言

3 分析和设计 3.1 系统分析及设计思路 (1)创建哈希表 (2)姓名(结构体数组)初始化 (1)用除留余数法构建哈希函数 (2)用链表法处理冲突 (3)查找哈希表 在哈希表中进行查找,输出查找的结果和关键字,并计算和输出查找成功的平均查找长度 (4) 显示哈希表 显示哈希表的的格式: 3.2 主要数据结构及算法 定义结构体typedef struct hashtable创建哈希表 定义函数Hash_Init(HashTable ht)来对哈希表初始化 定义函数Hash_Insert(HashTable ht, Node *node)来为哈希表分配地址 定义函数Hash_Init(ht)输入30个名字 定义函数Hash_Create(HashTable ht)来求哈希表长度 定义函数hash_output(HashTable h)来输出哈希表 定义函数Hash_Link()构造链表函数 定义函数int hash_search(int h[],int key)查找输入的名字 3.3 函数流程图 (1)哈希表的创建及初始化流程图

数据结构实验 散列表实验报告

课程实验报告 课程名称:数据结构 实验项目名称:散列表 专业班级: 姓名:XXX 学号: 完成时间:2015 年06 月13 日

背景 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在理想情况下,查找、插入、删除操作的时间均为O(1),是一种高效的动态集合结构。 例1:计算机程序设计语言的编译程序需要维护一个符号表,其中元素的关键值为任意字符串,与语言中的标识符对应。该符号表常采用散列表。 例2:为了节约空间,常常需要把文本文件采用压缩编码方式存储。LZW是对文本文件进行压缩和解压缩的方法之一,该方法采用了散列。 问题描述 我们希望在浩瀚的图书中,去发现一本书是否存在。我们不知道书的编号,只知道它的书名。(其实这已经不错了...)。通过书名,来查询它是否存在。 为了简化问题,我们假设每本书的书名都是一组小写字母组成,长度不超过100字符。 基本要求 (1)根据输入建立图书名称表,采用散列表实现该表,散列函数选用BKDE 字符串哈希。 (2)数据的输入输出格式: 输入分为两部分 第一部分,第一行是行数n,n <= 5000。余下n行,每行一个字符串。表示已存 在的图书记录。 第二部分,第一行是行数m,m <= 1000。余下m行,每行一个字符串。表示要查 询的图书记录。 输出: 输出为m行,如果被查的记录存在,则输出"YES",如果不存在则输出"NO"。 测试数据 输入: 4 a ans and hellocpp

数据结构课设-通讯录系统的设计与实现——哈希表

课程设计(论文)任务书 软件学院学院软件工程专业班 一、课程设计(论文)题目:通讯录管理系统的设计与实现——哈希表 二、课程设计(论文)工作自2016 年 1 月 4 日起至 2016 年 1 月 10 日止 三、课程设计(论文) 地点: 软件测试中心(北区测试二室) 四、课程设计(论文)内容要求: 1.本课程设计的目的 ⑴训练学生灵活应用所学数据结构知识,独立完成问题分析,结合课程的理论知识,编写程序求解指定问题; ⑵初步掌握软件开发过程的问题分析、系统设计、编码、测试等基本方法和技能; ⑶提高综合运用所学的理论知识和方法独立分析和解决问题的能力,巩固、深化学生的理论知识,提升编程水平。 2.课程设计的任务及要求 1)基本要求: ⑴要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编写上机程序和上机调试等若干步骤完成题目,最终写出完整的报告; ⑵在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率; ⑶程序设计语言推荐使用C/C++,程序书写规范,源程序需加必要的注释; ⑷每位同学需提交可独立运行的程序和规范的课程设计报告。 2)课程设计论文编写要求 ⑴理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订; ⑵课程设计报告包括中文目录、设计任务、需求分析、概要设计、详细设计、编码实现、调试分析、课设总结、谢辞、参考文献、附录等; ⑶设计部分应包含系统功能模块图,调试分析应包括运行截图等。 3)课程设计评分标准: ⑴学习态度:10分; ⑵系统设计:20分; ⑶编程调试:20分; ⑷回答问题:20分; ⑸论文撰写:30分。

数据结构课程设计--哈希表实验报告

福建工程学院 课程设计 课程:算法与数据结构 题目:哈希表 专业:网络工程 班级:xxxxxx班 座号:xxxxxxxxxxxx 姓名:xxxxxxx 2011年12 月31 日 实验题目:哈希表 一、要解决的问题 针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。 基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。 运行的环境:Microsoft Visual C++ 6.0 二、算法基本思想描述 设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。建立哈希表并且将其显示出来。通过要查找的关键字用哈希函数计算出相应的地址来查找人名。通过循环语句调用数组中保存的数据来显示哈希表。 三、设计 1、数据结构的设计和说明 (1)结构体的定义 typedef struct //记录 { NA name; NA xuehao; NA tel; }Record;

{ Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量 }HashTable; 哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。 2、关键算法的设计 (1)姓名的折叠处理 long fold(NA s) //人名的折叠处理 { char *p; long sum=0; NA ss; strcpy(ss,s); //复制字符串,不改变原字符串的大小写 strupr(ss); //将字符串ss转换为大写形式 p=ss; while(*p!='\0') sum+=*p++; printf("\nsum====================%d",sum); return sum; } (2)建立哈希表 1、用除留余数法构建哈希函数 2、用线性探测再散列法处理冲突 int Hash1(NA str) //哈希函数 { long n; int m; n=fold(str); //先将用户名进行折叠处理 m=n%HASHSIZE; //折叠处理后的数,用除留余数法构造哈希函数 return m; //并返回模值 }Status collision(int p,int c) //冲突处理函数,采用二次探测再散列法解决冲突{ int i,q; i=c/2+1; while(i=0) return q; else i=c/2+1; } else{ q=(p-i*i)%HASHSIZE; c++;

哈希表设计-数据结构课程设计

实习6、哈希表设计 一、需求分析 1. 问题描述 针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过R,完成相应的建表和查表顺序。 2. 基本要求 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。 3. 测试数据 取读者周围较熟悉的30个人的姓名。 4. 实现提示 如果随机数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度均不超过19个字符(最长的人名如:庄双双(Zhuang Shuangshuang))。字符的取码方法可直接利用C 语言中的toascii函数,并可先对过长的人名先作折叠处理。 二、概要设计 ADT Hash { 数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。 数据关系R:数据元素同属一个集合。 InitNameTable() 操作结果:初始化姓名表。 CreateHashTable() 操作结果:建立哈希表。 DisplayNameTable() 操作结果:显示姓名表。 DisplayHashTable() 操作结果:显示哈希表。 FindName() 操作结果:查找姓名。 }ADT Hash 三、详细设计(源代码) (使用C语言) #include #include//time用到的头文件 #include//随机数用到的头文件 #include//toascii()用到的头文件 #include//查找姓名时比较用的头文件 #define HASH_LEN 50//哈希表的长度 #define P 47//小于哈希表长度的P #define NAME_LEN 30//姓名表的长度 typedef struct {//姓名表 char *py; //名字的拼音 int m; //拼音所对应的 }NAME; NAME NameTable[HASH_LEN]; //全局定义姓名表 typedef struct {//哈希表 char *py; //名字的拼音

哈希表实现通讯录-数据结构与算法课程设计报告

合肥学院 计算机科学与技术系 课程设计报告 2009~2010学年第二学期 课程数据结构与算法 课程设计名称哈希表实现通讯录

题目:(哈希表的设计与实现的问题) 设计哈希表实现电话号码查询系统。设计程序完成以下要求:(1)设每个记录有下列数据项:电话号码、用户名、地址;(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立哈希表;(3)采用再哈希法解决冲突;(4)查找并显示给定电话号码的记录;(5)查找并显示给定用户的记录。 一、问题分析和任务定义 此程序需要完成如下要求:设计哈希表实现电话号码查询系统。 实现本程序需要解决以下几个问题: (1)设计结点使该结点包括电话号码、用户名、地址。 (2)利用再哈希法解决冲突。 (3)分别以电话号码和用户名为关键字建立哈希表。 (4)实现查找并显示给定电话号码的记录。 (5)查找并显示给定用户的记录。 本问题的关键和难点在于如何解决散列的问题。由于结点的个数无法的知,并且如果采用线性探测法散列算法,删除结点会引起“信息丢失”的问题。所以采用链地址法散列算法。采用拉链法,当出现同义词冲突时,使用链表结构把同义词链接在一起,即同义词的存储地址不是散列表中其他的空地址。 首先,解决的是定义链表结点,在拉链法中,每个结点对应一个链表结点,它由三个域组成,而由于该程序需要分别用电话号码和用户名为关键字建立哈希表,所以该链表结点它是由四个域组成.name[8] 、num[11]和address[20]都是char浮点型,输入输出都只能是浮点型的。 采用拉链法,其中的所有同义词构成一个单链表,再由一个表头结点指向这个单链表的第一个结点。这些表头结点组成一个一维数组,即哈希表。数组元素的下标对应由散列函数求出的散列地址。 其次,设计散列函数,本程序需要设计两个散列函数才能解决问题,程序需要分别为以电话号码和用户名为关键字建立哈希表。所以要分别以用户名、号码为关键字建立两个散列函数, 对于以号码为关键字的散列函数,是将十一个数字全部相加,然后对20求余。得到的数作为地址。对于以用户名为关键字的散列函数,是将所有字母的ASCLL码值相加,然后对20求余。 再次,需要实现添加结点的功能,则其中必须包括一个输入结点信息、添加结点的函数;需要实现查找函数,则必须包括一个查找结点的函数;需要对文件进行保存,则必需要包括保存文件函数。还需要包括一个主菜单和一个主函数。 最后,当程序设计出来后的测试数据为:

哈希表实验报告

数据结构实验报告四——哈希表查找名字(字符串) 实验题目:哈希表查找名字(字符串) 实验目标: 输入一组名字(至少50个),将其保存并利用哈希表查找。输出哈希查找冲突次数,哈希表负载因子、查找命中率。 数据结构: 哈希表与数组(二维)。二维数组用于静态顺序存储名字(字符串),哈希表采用开放定址法,用于存储名字(字符串)对应得关键字并实现对名字(字符串)得查找。 需要得操作有: 1、关键字求取(主函数中两次出现,未单独编为函数) 关键字key=abs(字符串首位ASCII码值-第二位ASCII码值+第([]+1)位ASCII码值-最后一位ASCII码值-倒数第二位ASCII码值)*字符串长度(abs为求整数绝对值得函数)。 2、处理关键字得哈希函数(Hash) 利用平方取中法求关键值key在哈希表中得位置。公式add=(key*key)%1000/LENGTH(a dd为key在哈希表中得地址)。 int Hash(intkey) { ?return((key*key)/1000%LENGTH); } 3、处理哈希表中冲突得函数(Collision) 利用线性探测再散列处理冲突,利用全局变量count统计冲突次数。 int Collision(intkey,int Hashtable[]) { inti; for(i=1;i<=LENGTH;i++) { ??if(Hashtable[(Hash(key)+i)%LENGTH]==-1) ?return((Hash(key)+i)%LENGTH); ??count++; } } 4、哈希表初始化(InitHash) void InitHash(int Hashtable[]) { inti; for(i=0;i<LENGTH;i++) ??Hashtable[i]=-1; } 5、向哈希表中插入关键字(InsertHash) void InsertHash(int key,int Hashtable[]) { int add;

数据结构课程设计哈希表

数据结构课程设计报告

课题四哈希表查找的设计 1. 任务和功能要求 设哈希表长为20,用除留余数法构造一个哈希函数,以开放定址法中的线性探测再散列法作为解决冲突的方法,编程实现哈希表查找、插入和建立算法。 2. 需求分析 用户输入20个以内的数字存储在哈希表中,并可以在表中查找关键字。3.概要设计 typedef struct { int *key; //关键字 int count; //表长 }HashTable; int creat(HashTable *T) //初始化哈希表 程序调用关系如下: 主函数模块 哈希表初始化模块查询模块 插入模块 4. 详细设计 #include #include

#include #include typedef struct { int *key; //关键字 int count; //表长 }HashTable; int search(HashTable *T,int k) //初始化哈希表 { int a; a=k%13; while(a<20) { if(T->key[a]==k) break; a++; } if(a<20) return a; else return 0; } void insert(HashTable *T,int k) { int i,j; i=search(T,k); if(i!=0) printf(" 关键字已存在于位置%d",i); else { j=k%13; while(j<20) { if(T->key[j]==0) { T->key[j]=k;break; } else j++; } } }

通讯录管理系统的设计与实现

大连民族大学 计算机科学与工程学院实验报告 实验题目: 1. 学生信息管理系统的设计与实现 2. 暴力算法在旅行商问题中的应用 课程名称:信息系统开发案例 实验类型:□演示性□验证性□操作性□设计性 综合性 专业:软件工程班级:144 学生姓名:赵耀学号:2014082430 实验日期:2017年3月6日—4月27日 实验地点:金石滩校区I303机房 实验学时:24学时实验成绩: 指导教师:赵戈

通讯录管理系统的设计与实现 摘要 本项目用C++语言开发了一个简单的通讯录管理系统,该系统能对联系人信 息进行“增删改查”。系统的UI设计基于Windows系统自带的控制台。测试结 果表明该通讯录管理系统可以稳定正确运行,具有较高的可靠性。 关键词:通讯录管理系统;C++语言;Windows 控制台 目录 1.选题的背景和意义 (3) 2.需求分析 (3) 2.1 用例图 (3) 2.2 用例文本 (4) 3.总体设计 (5) 3.1 通讯录管理系统功能模块图 (5) 3.2 主控main函数执行流程图 (6) 3.3 执行流程图的解释说明 (6) 3.4 存储结构设计 (7) 4.详细设计 (8) 5程序运行结果 (9) 6总结和展望 (9) 7附录 (10) 程序源代码: (10)

1.选题的背景和意义 当今时代,计算机已经成为人们生活中不可或缺的一部分,它打破了地域时间限制,改变了人们的工作和生活方式。人们之间的联系越来越便捷,这就使得要经常与很多人保持着联系,而单纯依靠人脑已经很难记住所有人的联系方式还有其各做附加信息。通讯录系统能方便用户的需求,满足用户迅速、准确的查找修改或者删除联系人信息,把各个联系人信息以文件保存。本文介绍了c++编写简易通讯录管理:系统的分析,功能模块的设计,系统的流程图及运行界面。此系统的主要管理的信息由:联系人的姓名、性别、电话号码,加深对c++语言程序设计的理解,提高算法设计的能力,锻炼编程的能力。用c语言编程一个通讯录管理系统软件,要求能实现通讯录管理系统中的增加信息,删除信息,显示通讯里的所有信息,按名字查询信息,保存通讯录,退出系统。。 2.需求分析 2.1 用例图 通讯录管理系统的用例图如下图所示: 图2.1 用例图

数据结构课程设计--哈希表实验报告

福建工程学院课程设计 课程:算法与数据结构 题目:哈希表 专业:网络工程 班级:xxxxxx班 座号:xxxxxxxxxxxx 姓名:xxxxxxx 2011年12 月31 日

实验题目:哈希表 一、要解决的问题 针对同班同学信息设计一个通讯录,学生信息有姓名,学号,电话号码等。以学生姓名为关键字设计哈希表,并完成相应的建表和查表程序。 基本要求:姓名以汉语拼音形式,待填入哈希表的人名约30个,自行设计哈希函数,用线性探测再散列法或链地址法处理冲突;在查找的过程中给出比较的次数。完成按姓名查询的操作。 运行的环境:Microsoft Visual C++ 6.0 二、算法基本思想描述 设计一个哈希表(哈希表内的元素为自定义的结构体)用来存放待填入的30个人名,人名为中国姓名的汉语拼音形式,用除留余数法构造哈希函数,用线性探查法解决哈希冲突。建立哈希表并且将其显示出来。通过要查找的关键字用哈希函数计算出相应的地址来查找人名。通过循环语句调用数组中保存的数据来显示哈希表。 三、设计 1、数据结构的设计和说明 (1)结构体的定义 typedef struct //记录 { NA name; NA xuehao; NA tel; }Record; 录入信息结构体的定义,包含姓名,学号,电话号码。 typedef struct //哈希表 { Record *elem[HASHSIZE]; //数据元素存储基址 int count; //当前数据元素个数 int size; //当前容量 }HashTable; 哈希表元素的定义,包含数据元素存储基址、数据元素个数、当前容量。 2、关键算法的设计 (1)姓名的折叠处理

数据结构实验四哈希表及其查找

云南大学数学与统计学实验教学中心实验报告 课程名称: 数据结构与算法学期: 2011-2012学年第二学期 成绩: 指导教师:xxx学生姓名:xxx学生学号:xxxxx 实验名称:哈希表及其查找实验要求:必做实验学时:4(+2)学时 实验编号:4(及5)实验日期:第6-8周完成日期:2012.5.10 学院:数学与统计学院专业:信息与计算科学年级:2010级 一、实验目的 通过实验掌握散列存储的基本概念,进行哈希问题的处理,同时附带进行字符串的处理的练习。 二、实验内容 为某单位的人名(n=30人)设计一个哈希表,使得平均查找长度<2,要求完成相应的哈希建表和查表。。 三、实验环境 Windows XP 程序设计语言C 四、实验过程 1.实验要求: 1、设人名长度<10个字符,用二维字符数组存储哈希表:char hash[ ][10]; 2、要求哈希函数用除留余数法,并用人名的10个字符代码和作为分子; 用(补偿性)线性探测再散列处理冲突。 3、依题意有:平均查找长度=(1+1/(1-α))/2< 2,∴取α=0.6, 由此哈希表长m=n/α=30/0.6=50; 所以有char hashlist [ 50][10]; 令:除留余数法中的P取47; (补偿性)线性探测再散列的地址:j=(j+Q)% m中的Q取17。 4、对程序结构的要求: ①要求为哈希建表和哈希查表分别编写和设计相应的函数: createhash( ... ... ); hashsearch(... ...); ②再设计一个哈希函数表的输出函数printhash( ),对构造的哈希表进行输出,注 意输出格式要在屏幕好看,先输出序号(1~30),再输出该序号 的人名或null,每行输出10项,共输出5行。 ③还应有一个初始化char hashlist [ 50][10]的函数Inithashlist( ), 初始时将50个人名全赋值为null. 5、在主函数中: 调用Inithashlist( )初始化哈希表;

哈希表设计数据结构课程设计

哈希表设计数据结构课程设计

实习6、哈希表设计 一、需求分析 1. 问题描述 针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度均不超过R,完成相应的建表和查表顺序。 2. 基本要求 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列法处理冲突。 3. 测试数据 取读者周围较熟悉的30个人的姓名。 4. 实现提示 如果随机数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度均不超过19个字符(最长的人名如:庄双双(Zhuang Shuangshuang))。字符的取码方法可直接利用C语言中的toascii函数,并可先对过长的人名先作折叠处理。 二、概要设计 ADT Hash { 数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键

字。 数据关系R:数据元素同属一个集合。 InitNameTable() 操作结果:初始化姓名表。 CreateHashTable() 操作结果:建立哈希表。 DisplayNameTable() 操作结果:显示姓名表。 DisplayHashTable() 操作结果:显示哈希表。 FindName() 操作结果:查找姓名。 }ADT Hash 三、详细设计(源代码) (使用C语言) #include #include//time用到的头文件 #include//随机数用到的头文件 #include//toascii()用到的头文件 #include//查找姓名时比较用的头文件#define HASH_LEN 50//哈希表的长度

数据结构哈希表的实验报告

课程实习报告 一、需求分析: 1.本程序来自于图书馆靠书名来检索想要查找的书问题。 2.本程序要求: (1)根据输入建立图书名称表,采用创建散列表实现。 (2)建散列表后,如果想要查找的数据在散列表中输出yes否则输出no。 二、哈希表简介 结构中存在关键字和K相等的记录,则必定存储在f(K)的位置上。由此,不需比较便可直接取得所查记录。这个对应关系f称为散列函数(Hash function),按这个思想建立的表为散列表。

* 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。 * 综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”,作为这条记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。这个现象也叫散列桶,在散列桶中,只能通过顺序的方式来查找,一般只需要查找三次就可以找到。科学家计算过,当负载因子(load factor)不超过75%,查找效率最高。* 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。 程序设计流程 程序思想 (一)哈希函数unsigned int hash_BKDE(char *str)生成映射 地址,成为散列表的编号。 (二)哈希表HashTable::HashTable()通过数组储存元素 (三)插入函数void HashTable::insert(char*c)插入字符串, 先计算要插入字符串生成的映射地址,然后在相应的地址插入,如果没有空位查找空位插入。

基于散列表的电话号码查询系统 完整版

#include //cout,cin语句的头文件 #include //清屏函数头文件:使用csl时调用system #include //字符串头文件 #include #include #define MAXSIZE 100 //电话薄记录的数量 #define MAX_SIZE 50 //用户名、电话号码、地址的最大长度 #define HASHSIZE 400 //定义表长 #define SUCCESS 1 //查找 #define UNSUCCESS -1 #define LEN sizeof(HashTable) // 哈希表的长度 using namespace std; typedef int Status;//typedef用来定义类型的别名。此处用status作为int别名,目的表达int 变量是一个状态变量。 typedef char NA[MAX_SIZE]; //NA作为char的别名 typedef struct{ // 自定义一个记录用户名、电话号码、联系地址的结构体的别名record NA name,tel,add,way; }Record; Record a[HASHSIZE]; typedef struct{ //散列表 Record *elem[HASHSIZE]; //数据元素存储地址 int count; //数据元素个数 int size; //容量 }HashTable; Status eq(NA x,NA y) { //关键字比较,相等返回SUCCESS;否则返回UNSUCCESS if(strcmp(x,y)==0)//2个字符串的大小比较s1=s2,strcmp(s1,s2) == 0; s1>s2, strcmp(s1,s2) == 1; s1>NUM_BER; int i;

哈希表及其应用-课程设计

课程设计题目哈希表及其应用 教学院计算机学院 专业 班级 姓名 指导教师 年月日

课程设计任务书 2010 ~2010 学年第 1 学期 一、课程设计题目哈希表及其应用 二、课程设计内容 建立一个小型信息管理系统(可以是图书、人事、学生、物资、商品等任何信息管理系统)。要求: 1.使用哈希查找表存储信息; 2.实现查找、插入、删除、统计、输出等功能; 三、进度安排 1.初步完成总体设计,搭好框架; 2.完成最低要求:尝试使用多种哈希函数和冲突解决方法,并通过实际运行测试给出自己的评价 四、基本要求 1.界面友好,函数功能要划分好 2.程序要加必要的注释 3.要提供程序测试方案 教研室主任签名: 年月日

1 概述 (4) 2 设计目的 (4) 3 设计功能说明 (4) 4 详细设计说明 (5) 5 流程图 (5) 6 程序代码 (6) 7 程序运行结果 (15) 8 总结 (19) 参考文献 (19) 成绩评定表 (20)

数据结构是一门理论性强、思维抽象、难度较大的课程,是基础课和专业课之间的桥梁,只有进行实际操作,将理论应用于实际中,才能确实掌握书中的知识点。通过课程设计,不仅可以加深学生对数据结构基本概念的了解,巩固学习成果,还能够提高实际动手能力。为学生后继课程的学习打下良好的基础。 2 设计目的 《数据结构》课程设计是在教学实践基础上进行的一次大型实验,也是对该课程所学理论知识的深化和提高。因此,要求学生能综合应用所学知识,设计与制造出具有较复杂功能的应用系统,并且在实验的基本技能方面上进行一次全面的训练。通过程序的编译掌握对程序的调试方法及思想,并且让学生学会使用一些编程技巧。促使学生养成良好的编程习惯。 1.使学生能够较全面地巩固和应用课堂中所学的的基本理论和程序设计方法,能够较熟练地完成程序的设计和调试。 2.培养学生综合运用所学知识独立完成程序课题的能力。 3.培养学生勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.提高学生对工作认真负责、一丝不苟,对同学团结友爱,协作攻关的基本素质。 5.培养学生从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 6.对学生掌握知识的深度、运用理论去处理问题的能力、实验能力、课程设计能力、书面及口头表达能力进行考核。 3 设计功能分析 本设计的功能如下: 1、利用哈希函数来实现一个小型信息管理系统,其中信息包含用户名,地址,电话等。 2、能添加用户信息,并能保存该信息。 3、查询管理系统中的信息:可通过姓名查找,也可通过电话查找等两种方式。

数据结构课程设计-散列表的设计与实现

榆林学院14届课程设计 《散列表的设计与实现》 课程设计说明书 学生姓名: 学号: 院系:信息工程学院 专业:计算机科学与技术 班级:计14本1 指导教师: 答辩时间:2015年 12 月 31 日

摘要 (1) Abstract (2) 第一章绪论 (3) 1. 数据结构简介 (3) 2. 应用技术领域及范围 (3) 3.设计的原理、方法和主要内容 (3) 第二章需求分析 (4) 1. 任务需求 (4) 2. 功能需求 (4) 3. 设计目的 (4) 4. 设计要求 (4) 第三章系统设计 (6) 1. 设计思想 (6) 2. 实现方法 (6) 3. 主要模块 (6) 4. 系统功能设计 (6) 第四章系统实现及调试 (8) 1. 系统功能流程 (8) 2. 功能模块实现及调试 (9) 总结 (11) 参考文献 (11)

散列表的设计与实现所涉及到的操作算法都是以链表或顺序表的基本运算作为基础的,此程序通过通讯录实现,包括建立通讯录,添加记录,查询记录,删除记录,显示记录,修改记录。通过顺序表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。 关键字:新建通讯录,添加记录,查询记录,修改记录,删除记录,显示记录,散列表,散列函数,处理冲突

Abstract The design and implementation of the hash table are based on the basic operations of the list or sequence table. This program is implemented by the address book, including the establishment of the address book, adding records, record, delete records, record, modify records. Through sequential table storage structure to achieve data input, to achieve the process of the subroutine, the exception of the input information. Key words: new address book, add records, record, modify records, delete records, display records, hash table, hash function, handling conflict.

数据结构哈希表实验报告

HUNAN UNIVERSITY 课程实习报告 题目: 哈希表 学生姓名唐鹏 学生学号 2 专业班级物联2班 指导老师吴帆 完成日期2014年4月2日

一、需求分析: 1.本程序来自于图书馆靠书名来检索想要查找的书问题。 2.本程序要求: (1)根据输入建立图书名称表,采用创建散列表实现。 (2)建散列表后,如果想要查找的数据在散列表中输出yes否则输出no。 二、哈希表简介 结构中存在关键字与K相等的记录,则必定存储在f(K)的位置上。由此,不需比较便可直接取得所查记录。这个对应关系f称为散列函数(Hash function),按这个思想建立的表为散列表。 * 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。 * 综上所述,根据散列函数H(key)与处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象”, 作为这条记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。这个现象也叫散列桶,在散列桶中,只能通过顺序的方式来查找,一般只需要查找三次就可以找到。科学家计算过,当负载因子(load factor)不超过75%,查找效率最高。 * 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率就是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。 程序设计流程 程序思想 (一)哈希函数unsigned int hash_BKDE(char *str)生成映射地址,成为散列表的编 号。 (二)哈希表HashTable::HashTable()通过数组储存元素 (三)插入函数void HashTable::insert(char*c)插入字符串,先计算要插入字符串生 成的映射地址,然后在相应的地址插入,如果没有空位查找空位插入。(四)查找函数bool HashTable::find(char*c)进行查找,先计算要生成字符串的地 址,再到散列表中进行查找比较。 (五)主函数main() 1)输入:输入散列表内容与要查找的数据个数与数据

相关文档
最新文档