散列法的实验研究 课程设计报告

合集下载

散列表数据结构课程设计

散列表数据结构课程设计

散列表数据结构课程设计一、课程目标知识目标:1. 理解散列表(哈希表)的基本概念,掌握其数据结构特点及实现原理;2. 学会使用散列表解决实际问题,如查找、插入和删除等操作;3. 掌握解决散列表冲突的方法,如线性探测、二次探测和链地址法等;4. 了解散列表在不同编程语言中的应用和实现。

技能目标:1. 能够运用散列表实现高效的数据存储和检索,提高编程解决问题的能力;2. 学会分析散列表的性能特点,如时间复杂度和空间复杂度,并进行优化;3. 能够运用散列表解决实际问题,培养编程思维和解决问题的能力;4. 掌握调试和优化散列表程序的方法,提高程序质量和效率。

情感态度价值观目标:1. 培养学生对数据结构与算法的兴趣,激发学习热情,形成主动探究的学习习惯;2. 培养学生的团队合作意识,学会在团队中分工协作,共同解决问题;3. 增强学生的创新意识,鼓励尝试不同的解决方案,提高解决问题的灵活性;4. 培养学生严谨、踏实的科学态度,注重算法的实际应用和优化。

本课程针对高年级学生,结合学科特点和教学要求,注重理论与实践相结合,通过散列表数据结构的学习,提高学生的编程能力和解决问题的能力,培养学生良好的学习态度和团队合作精神。

课程目标具体、可衡量,便于后续教学设计和评估。

二、教学内容1. 散列表基本概念:介绍散列表的定义、作用及其在数据结构中的地位;- 教材章节:第XX章XX节;- 内容:散列表的定义、散列函数、散列值、冲突和解决方法。

2. 散列表的实现原理:- 教材章节:第XX章XX节;- 内容:线性探测法、二次探测法、链地址法等散列表实现方式及其优缺点。

3. 散列表的操作:- 教材章节:第XX章XX节;- 内容:散列表的查找、插入和删除操作及其时间复杂度分析。

4. 散列表性能分析:- 教材章节:第XX章XX节;- 内容:时间复杂度、空间复杂度、装填因子及其对性能的影响。

5. 散列表应用实例:- 教材章节:第XX章XX节;- 内容:实际应用场景、编程实现、性能评估与优化。

散列查找顺序表的实现实验报告

散列查找顺序表的实现实验报告

题目:顺序表的实现一、实验题目顺序表的实现二、实验目的⑴掌握线性表的顺序存储结构;⑵验证顺序表及其基本操作的实现;⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。

三、实验内容与实现⑴建立含有若干个元素的顺序表;⑵对已建立的顺序表实现插入、删除、查找等基本操作。

实验实现#include<stdio.h>#include<memory.h>int a[10000];int arrlong(){int j;for(j=0;j<12;j++)if(a[j]==0)break;return j;}int Insect(int n,int s) ////插入{int j;for(j=0;j<10000;j++)if(a[j]==0)break;printf("要操作的元素\n");for(int i=0;i<j;i++)printf("%d ",a[i]);printf("\n");for(int i=j;i>n-1;i--)a[i+1]=a[i];a[n]=s;for(int k=0;k<j+1;k++)printf("%d ",a[k]);printf("\n");}int Search(int p) //查找{int j,h;for(j=0;j<12;j++){if(a[j]==0)break;}for(h=0;h<j;h++){if(a[h]==p){printf("查找到的数在第%d位\n",h+1);break;}}if(h==j)printf("查无此数\n");}int Delate(int g,int q) //删除{int j;g=g-1;for(int j=g;j<12;j++)a[j]=a[j+1];for(q =0;q<12;q++){if(a[q]==0)break;}for(int i=0;i<q;i++)printf("%d ",a[i]);printf("\n");}int main(){int y,c;printf(" 菜单\n");printf("-------------------------------------------------\n");printf("0 建表\n1 插入\n2 查找\n3 删除\n4 退出\n");printf("-------------------------------------------------\n");while(scanf("%d",&y)!=EOF){int n,x,s;if(y==0){memset(a,0,sizeof(a));printf("请输入元素的个数:\n");scanf("%d",&c);printf("请输入数据:\n");for(int i = 0;i < c;i++)scanf("%d",&a[i]);}else if(y==1){int L;printf("请输入插入的第几位\n");scanf("%d",&n);//输入L=arrlong();if(n<=L){printf("请输入插入的数字\n");scanf("%d",&s);Insect(n,s);}else{printf("输入有误\n");continue;}}else if(y==2){int p;printf("请输入要查找的数字\n");scanf("%d",&p);Search(p);}else if(y==3){int g,q,L;printf("请输入要删除数的位置\n");scanf("%d",&g);L=arrlong();if(L>=g){Delate(g,q);}else{printf("输入有误\n");printf(" 菜单\n");printf("-------------------------------------------------\n");printf("0 建表\n1 插入\n2 查找\n3 删除\n4 退出\n");printf("-------------------------------------------------\n");continue;}}else if(y==4)break;else{printf("输入有误\n");printf(" 菜单\n");printf("-------------------------------------------------\n");printf("0 建表\n1 插入\n2 查找\n3 删除\n4 退出\n");printf("-------------------------------------------------\n");continue;}printf(" 菜单\n");printf("-------------------------------------------------\n");printf("0 建表\n1 插入\n2 查找\n3 删除\n4 退出\n");printf("-------------------------------------------------\n");}}建立顺序表:插入操作:查找操作:删除操作:插入数据超出顺序表范围:查找不到输入数据:删除数据超出顺序表范围:四、实验心得1.掌握了为数组赋值的方法,深刻理解了数组的含义2.掌握了为数组排序的方法。

散列表设计

散列表设计
实验七 散列表设计
一、问题描述
针对某个集体中人名设计一个散列表,使得平均假设人名为中国人姓名的汉语拼音形式。待填入散列表的人名共有30个,取平均查找长度上限为2。
三、测试数据
取读者周围较熟悉的30人的姓名。
四、实现提示
(4)测试结果
可以用屏幕截屏。
如果随机函数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度不超过20个字符。可先对过长的人名作折叠处理。
五、实验报告主要内容
(1)题目要求
(2)设计
包括:记录结构的设计
散列函数和冲突处理方法的设计
软件结构的设计
(3)程序代码

数据结构课程设计-散列法的研究大全

数据结构课程设计-散列法的研究大全

数据结构课程设计-散列法的研究大全第一篇:数据结构课程设计-散列法的研究大全学院:班级:完成人:姓指导教师:数据结构课程设计说明书信息科学与工程学院计算机科学与技术名:学号:山东科技大学 2013年12月25日课程设计任务书一、课程设计题目:散列法的实验研究二、课程设计应解决的主要问题:(1)数据元素的输入和输出(2)线性再散列法建立哈希表(3)二次探测再散列法建立哈希表(4)链地址法建立哈希表(5)线性再散列法进行数据查找(6)二次探测再散列法进行数据查找(7)链地址法进行数据查找(8)退出系统三、任务发出日期: 2013-10-01 课程设计完成日期: 2013-12-20小组分工说明小组编号 7 题目:散列法的实验研究小组分工情况:一人独立完成所有工作。

组长签字: 2013 年 12 月 31 日指导教师对课程设计的评价成绩:指导教师签字:年月日目录1.需求分析说明2.概要设计说明3.详细设计说明4.调试分析5.用户使用说明6.课程设计总结7.测试结果8.参考书目-3-4-5-7-8-10-10-12需求分析说明内部排序教学软件的总体功能要求:散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。

两者是影响查询算法性能的关键因素。

对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。

基本功能如下:(1)界面友好,易与操作。

采用菜单方式进行选择。

(2)实现三种方法进行哈希表的构造。

包括线性再散列法、二次探测再散列法和链地址法。

(3)根据三种构造方法分别进行数据元素的查找,若查找成功,则同时输出探查/冲突次数。

以下是各功能模块的功能描述: 1.主函数模块本模块的主要功能是初始化图形界面,调用各模块,实现功能。

2.构造哈希表子模块本模块的主要功能是采用线性再散列法、二次探测再散列法、链地址法三种方法构造哈希表。

3.查找功能及输出子模块本模块的主要功能是在采用线性再散列法、二次探测再散列法、链地址法三种方法构造哈希表后,采用相应的方法对键入的数据进行查找,并计算探查/冲突次数。

散列表实验报告(不同装载因子下链表法和放寻址法对比)

散列表实验报告(不同装载因子下链表法和放寻址法对比)

散列表实验报告(不同装载因子下链表法和放寻址法对比)TOC \o “1-4“ \h \z \u 1 概述22 原理介绍22.1 散列表介绍22.2 直接寻址表32.3 散列函数32.3.1 除法散列42.3.2 乘法散列42.3.3 全域散列42.4 解决碰撞问题52.4.1 链接法52.4.2 开放寻址法52.4.2.1 线性探查62.4.2.2 二次探查62.4.2.3 双重散列73 算法说明73.1 概述73.2 使用链接法解决碰撞问题83.2.1 算法思想83.2.2 伪代码描述93.2.3 算法分析与证明103.3 使用开放寻址法的双重散列解决碰撞问题123.3.1 算法思想123.3.2 伪代码描述123.3.3 算法分析与证明143.4 两个算法的比较144 实验设计与分析165 C++实现与结果分析185.1 C++实现与结果185.2 结果分析266 实验总结和感想27概述该实验报告主要是通过介绍散列表的各种技术,包括散列函数、解决碰撞的机制等技术,并对两种解决碰撞的机制:链接法和开放寻址法进行分析和证明,并通过实验分析两者在不同的规模下的运行时间和空间占用的对比,来证明在“算法说明”一章中的理论分析。

原理介绍散列表介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。

也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。

这个映射函数叫做散列函数,存放记录的数组叫做散列表。

它实际上是是普通数组概念的推广,因为可以对数组进行直接寻址,故可以而在O(1)时间内访问数组的任意元素。

如果存储空间允许,我们可以提供一个数组,为每个可能的关键字保留一个位置,就可以应用直接寻址技术。

基本概念若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。

由此,不需比较便可直接取得所查记录。

称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。

实验九散列函数实验

实验九散列函数实验

实验九散列函数实验【实验思考】参照实验原理,根据算法跟踪实验画出各个算法函数的主要流程图思考各个散列算法的安全性和优缺点【实验原理】散列函数是一种单向密码,即是一个从明文到密文的不可逆映射,只有加密过程,不可解密;同时散列函数可以将任意长度的输入经过变换以后得到固定长度的输出。

散列函数在完整性认证和数字签名等领域有广泛应用。

散列函数应满足以下要求:(1)算法公开,不需要密钥。

(2)具有数据压缩功能,可将任意长度的输入转换为固定长度的输出。

(3)已知m,容易计算出H(m)。

(4)给定消息散列值H(m),要计算出m在计算上是不可行的。

(5)对任意不同的输入m和n,它们的散列值是不能相同的。

一、MD5算法MD5(Message-Digest Algorithm 5)即信息-摘要算法,是MD4算法的改进;算法的输入为任意长度的消息,分为512比特长的分组,输出为128比特的消息摘要。

处理过程如下:(1)对消息进行填充,使其比特长度为n512+448(n为正整数),填充方式是固定的:第一位为1,其后各位为0。

(2)附加消息长度,使用上一步骤留出的64比特以小端(最低有效字节/位存储于低地址字节/位)方式来表示消息被填充前的长度,若消息长度大于264,则以264为模数取模。

(3)对消息摘要缓冲区初始化,算法使用128比特长的缓冲区来存储中间结果和最终散列值,将缓冲区表示成4个32比特长的寄存器A、B、C、D,每个寄存器以小端方式存储数据,初始值为(十六进制,低位字节在前)A=01234567,B=89ABCDEF,C=FEDCBA98,D=。

(4)以分组为单位对消息进行处理,每一个分组都经过压缩函数HMD5处理;HMD5有4轮处理过程,每轮有16步迭代,4轮处理过程的处理结构一样,所用逻辑函数不同,分别表示为F、G、H、I;每轮的输入为当前处理的消息分组和缓冲区当前的值,输出仍存放在缓冲区中。

最后第四轮的输出与第一轮输入的缓冲区值V相加,相加时将V看做4个32比特的字,每个字与第四轮输出的对应的字按模232相加,相加结果为HMD5的输出。

数据结构实验报告散列查找

数据结构实验报告散列查找

《数据结构》实验报告题目: 散列查找一、实验题目散列查找二、实验目的⑴掌握散列查找的基本思想;⑵掌握闭散列表的构造方法;⑶掌握线性探测处理冲突的方法;⑷验证散列技术的查找性能。

三、实验内容与实现⑴对于给定的一组整数和散列函数,采用线性探测法处理冲突构造散列表;⑵设计查找算法,验证查找性能。

实验实现:#include <stdio.h>#include <stdlib.h>#define HASHSIZE 10 // 长度#define NULLKEY -32768typedef struct{int *elem; // 数据元素存储地址,动态分配数组int count; // 当前数据元素个数}HashTable;int m = 0;int Init(HashTable *H){int i;m = HASHSIZE;H->elem = (int *)malloc(m * sizeof(int)); //分配内存H->count = m;for (i = 0; i<m; i++){H->elem[i] = NULLKEY;}return 1;}int Hash(int k)//除留余数法{return k % m;}void Insert(HashTable *H, int k)//插入数字如果有冲突用开放定址法{int addr = Hash(k);while (H->elem[addr] != NULLKEY){addr = (addr+1) % m;}H->elem[addr] = k;}int Search(HashTable *H, int k)//求哈希地址开放定址法解决冲突{int addr = Hash(k);while (H->elem[addr] != k){addr = (addr+1) % m;if (H->elem[addr] == NULLKEY || addr == Hash(k)) return -1;}return addr;}void Result(HashTable *H)//散列表元素显示{int i;for (i = 0; i<H->count; i++){if(H->elem[i]!=-32768)printf("%d ", H->elem[i]);}printf("\n");}int main(){int i, j, addr,n;HashTable H;int arr[HASHSIZE] = { NULL };Init(&H);printf("请输入数:");for (i = 0; i<10; i++)scanf("%d", &arr[i]);Insert(&H, arr[i]);}printf("输入的数存入哈希表后:");Result(&H);int b;printf("输入需要查找的数:\n");while(scanf("%d",&j)!=EOF){addr = Search(&H, j);if (addr == -1){printf("元素不存在,程序结束\n");break;}elseprintf("%d元素在表中的位置是:%d\n", j,addr+1); }}四、实验心得。

安全实验(2):散列操作

安全实验(2):散列操作

《信息系统安全》实验实验 - 散列操作目标第 1 部分:使用 OpenSSL 创建散列值第 2 部分:验证散列值背景/场景散列函数是一种数学算法,旨在将数据用作输入并生成固定大小的唯一字符串(也称为散列)。

散列函数运算速度快且很难逆转;根据单独的散列值,很难恢复用于创建任何给定散列值的数据。

散列函数的另一个重要特性是,即使对输入数据进行最小程度的更改,也会生成完全不同的散列值。

虽然 OpenSSL 可用于生成和比较散列值,但也可以使用其他工具。

本实验中也囊括其中的一些工具。

所需资源•CyberOps Workstation VM•互联网接入第 1 部分:使用 OpenSSL 创建散列值OpenSSL 可以用作创建散列值的独立工具。

要创建文本文件的散列值,请按照下列步骤操作:第 1 步:创建文本文件的散列值a. 在 CyberOps Workstation 虚拟机中,打开一个终端窗口。

b. 由于要创建散列值的文本文件位于 /home/analyst/lab.support.files/ 目录中,因此请更改为该目录:[analyst@secOps ~]$ cd /home/analyst/lab.support.files/c. 键入下面的命令,以在屏幕上列出 letter_to_grandma.txt 文本文件的内容:[analyst@secOps lab.support.files]$ cat letter_to_grandma.txt嗨,奶奶:我写这封信是为了感谢同学们送给我的巧克力曲奇饼。

我今天早上收到的,已经吃了一半了!它们实在是太好吃了!祝同学们一切都好。

爱同学们,吃饼干的孙子。

d. 在同一个终端窗口中,发出下面的命令来创建文本文件的散列值。

该命令将使用 MD5 作为散列算法,以生成该文本文件的散列值。

OpenSSL 计算出散列值后,散列值将显示在屏幕上。

[analyst@secOps lab.support.files]$ openssl md5 letter_to_grandma.txtMD5(letter_to_grandma.txt)= 8a82289f681041f5e44fa8fbeeb3afb6注意输出的格式。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

else i=c/2+1; } } return (-1); } 用线性再散列法查找,代码实现如下: void SearchHash1(HashTable1 *h,int data) { int d; d=data%HashSize; if(h[d].key==data) printf("数字%d的探查次数为:%d\n",h[d].key,h[d].si); else { do d=(d+1)%HashSize; while(h[d].key!=data && d<HashSize); if(d<HashSize) printf("数字%d的探查次数为:%d\n",h[d].key,h[d].si); else printf("没有查找到你所输入的数\n"); } 用二次探测再散列法查找 void SearchHash2(HashTable2 * h[],int data,int num) { int d; Node *q; d=data%num;
于表长是定值,α与“填入表中的元素个数”成正比,所以,α越大,填入 表中的元素较多,产生冲突的可能性就越大;α越小,填入表中的元素 较少,产生冲突的可能性就越小。实际上,散列表的平均查找长度是装 填因子α的函数,只是不同处理冲突的方法有不同的函数。
(e) 课程总结
(1)收获 通过本次课程设计,使我对计算机语言有了更深一层的了解,也使 我对算法的运用有了更多的体会,对算法和生活的联系也有了更多的体 会。更进一步了解和熟悉了关于哈希表的创建和运用。现在,计算机领 域,他只向我展现了冰山一角,以后我会继续探索。好的算法源于我们 不断的思考,思考源于我们对梦想的追寻。 (2)心得体会 在这次数据结构设计中遇到了很多实际性的问题,在实际设计中才 发现。书本上理论性的东西在实际应用中还是有一定的出入的。所以有 些问题要不断的更正以前的错误思维。通过这次设计,我懂得了学习的 重要性,了解到理论知识与实践结合的重要意义。学会了坚持、耐心和 努力,这将为自己今后的学习和工作打下牢固的基础。通过学习,对专 业知识了解更多,学会如何把自己平时所学的东西应用到实际中。 ----------------------------------------------------------------------------------------参考文献: [1] 李云清,杨庆红. 数据结构(C语言版).北京:人民邮电出版社, 2004. [2] 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997. [3] 苏光奎,李春葆.数据结构导学.北京:清华大学出版.2002. [4] 周海英,马巧梅,靳雁霞.数据结构与算法设计.北京:国防工业出版 社,2007.
typedef struct { Node *link; }HashTable2; typedef struct { int * elem[HashSize]; int count; int size; }HashTable3; (2) 主函数模块 void main() { int data; HashTable1 hash1[HashSize]; HashTable2 * hash2[HashSize]; HashTable3 * ha; ha=(HashTable3 *)malloc(sizeof(HashTable3)); for(int i=0;i<HashSize;i++) ha->elem[i]=NULL; ha->count=0; ha->size=HashSize; int a[MaxSize]; while(1) { printf("\n ┏━━━━━━━━━━━━━━━┓ "); printf("\n ┃ 欢迎使用本系统 ┃ "); printf("\n ┏〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
┓"); printf("\n ┃★ ★ ★ ★ ★ ★散列法的实验研究★ ★ ★ ★ ★ ★┃"); printf("\n ┃ 【1】. 添加数据信息 【2】 数据的输出 ┃"); printf("\n ┃ 【3】. 建立哈希表(线性再散列) ┃"); printf("\n ┃ 【4】. 建立哈希表(二次探测再散列) ┃"); printf("\n ┃ 【5】. 建立哈希表(链地址法) ┃"); printf("\n ┃ 【6】. 线性再散列法查找 ┃"); printf("\n ┃ 【7】. 二次探测再散列法查找 ┃"); printf("\n ┃ 【8】. 链地址法查找 ┃"); printf("\n ┃ 【0】. 退出程序 ┃"); printf("\n ┗〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 ┛"); printf("\n"); printf("\n"); printf("请输入一个任务选项>>>"); int x; scanf("%d",&x); switch(x) { case 1: GetIn (a);break; case 2: GetOut(a);break; case 3: CreateHashTable1(hash1,a,num);break; case 4: CreateHash3(ha,a,num);break; case 5:
q=h[d]->link; while(q->key!=data && q->next!=NULL) q=q->next; if(q->next!=NULL) printf("数字%d的查找次数为:%d\n",q->key,q->next); else printf("没有找到你要查找的那个数\n"); } 用链地址法查找,代码实现如下: void CreateHashTable2(HashTable2 *ht[],int *a,int num)//哈希表链地 址; { int i,d,cnt; Node *s,*q; for(i=0;i<num; i++) { ht[i]=(HashTable2 *)malloc(sizeof(HashTable2)); ht[i]->link=NULL; } for(i=0;i<num;i++) { cnt=1; s=(Node *)malloc(sizeof(Node)); s->key=a[i];s->next=NULL; d=a[i]%num; if(ht[d]->link==NULL) { ht[d]->link=s;
课程设计报告
问题描述:
(1) 散列法中,散列函数构造方法多种多样,同时对于同一散列函数解 决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。 (2) 程序实现几种典型的散列函数构造方法,并观察,不同的解决冲突 方法对查询性能的影响。
a. 需求分析:
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而 直接进行访问的数据结构。对不同的关键字可能得到同一散列地址,即 key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关 键字对该散列函数来说称做同义词。综上所述,根据散列函数H(key)和 处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间) 上,并以关键字在地址集中的“象”作为记录在表中的存储位置,这种表 便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称 散列地址。 散列表的查找过程基本上和造表过程相同。一些关键码可通过散列 函数转换的地址直接找到,另一些关键码在散列函数得到的地址上产生 了冲突,需要按处理冲突的方法进行查找。对散列表查找效率的量度, 依然用平均查找长度来衡量。查找过程中,关键码的比较次数,取决于 产生冲突的多少,产生的冲突少,查找效率就高,产生的冲突多,查找 效率就低。因此,影响产生冲突多少的因素,也就是影响查找效率的因 素。该课程设计要求比较几种哈希函数的构造方法和解决冲突的方法对 查询性能的影响。
数据的输出,运行结果如下图:
用线性再散列方法建立哈希表,运行结果如下图:
用二次探测再散列建立哈希表,运行结果如下图:
用线性再散列法查找,运行结果如下图所示:
用二次探测再散列法查找,运行结果如下图:
用链地址法查找,运行结果如下图:
退出程序,运行结果如下图:
对性能的分析:查找过程中,关键码的比较次数,取决于产生冲突 的多少,产生的冲突少,查找效率就高,产生的冲突多,查找效率就 低。因此,影响产生冲突多少的因素,也就是影响查找效率的因素。影 响产生冲突多少有以下三个因素: 1、散列函数是否均匀;2、处理冲 突的方法;3、散列表的装填因子。 散列表的装填因子定义为:α= 填入 表中的元素个数 / 散列表的长度。α是散列表装满程度的标志因子。由
b. 概要设计该程序实现对哈希 Nhomakorabea数的构造方法、处理冲突的方法及在哈希表中
查找数据的功能。 用线性再散列方法建立哈希表,用代码实现为: typedef struct { int key; int si; }HashTable1; void CreateHashTable1(HashTable1 *H,int *a,int num)//哈希表线性探测 在散列; { int i,d,cnt; for(i=0;i<HashSize;i++) { H[i].key=0; H[i].si=0; } for(i=0;i<num;i++) { cnt=1; d=a[i]%HashSize; if(H[d].key==0) { H[d].key=a[i]; H[d].si=cnt; } else { do
相关文档
最新文档