1、查找技术实验十一 散列表实验1. 实验目的 掌握散列查找的基本思想; 掌握闭散列表的构造方法; 掌握线性探测处理冲突的方法; 掌握散列技术的查找性能。2. 实验内容 对于给定的一组整数和散列函数,采用线性探测法处理冲突构造散列表; 设计查找算法,验证查找性能。3. 实现提示假设散列表长为 m,散列函数为除留余数法,即 H(key)=key % p,m 和 p 在主函数中由用户从键盘输入,待散列的数据也由用户从键盘输入,算法如下:假设在已建立的散列表中进行静态查找,在查找过程中设置计数器 count 统计元素的比较次数,查找算法如下:int CreatHash(int ht , int m) f
2、or (i=0; ik;while (k!=#) /#作为结束标志j=k % p; if (htj=0) htj=k; /没有发生冲突,直接存入else i=(j+1) % m;while (hti!=0 /发生冲突,向后探测若干次后存入break;else i=(i+1) % m; /向后探测一个位置if (i= =j) throw “溢出“;cink;闭散列表构造算法查找技术选作内容:闭散列表和开散列表查找性能的比较1. 问题描述对于给定的一组关键码,分别采用线性探测法和拉链法建立散列表,并且在这两种方法构建的散列表中查找关键码 k,比较两种方法的时间性能和空间性能。2. 基本要求 用线性
3、探测法处理冲突建立闭散列表; 用拉链法处理冲突建立开散列表; 设计合理的测试数据,比较二者的查找性能。3. 设计思想对于给定的一组关键码和相同的散列函数,如果处理冲突时采用的方法不同,建立散列表也不同,通常查找性能也不同。采用线性探测法处理冲突建立闭散列表以及在闭散列表上进行查找的算法在教材中已做过实验,下面讨论拉链法处理冲突的方法。首先定义开散列表的存储结构。同义词子表中的结点即为单链表中的结点,其结点结构定义如下(本章假定数据域均为整数):struct Nodeint data;Node *next;int HashSearch(int ht , int m, int k) j=k % p; count=0; i=j;while (hti!=0 ) if (+count if (p-data= =k) coutdata=ri;j=ri % p; s-next= htj; /头插法插入同义词子表htj=s; 开散列表的建立算法 HashTable