数据结构习题
的有关信息介绍如下:将以上九数字存在十二个空间中,增充因子为:9/12=0.75,由于哈希表的均匀特性,可以选key为11这个的一个素数为关键码值。也就是说将其中的键与11求余,余数放在对应的空间中,若是已经存在,则直接向后探测,放入到一个不存在的空间中即可。
int[] hashtable = new int;
int hashkey = 11;
//hashtable就是你要定义的哈表,我用C#表示一下
int[] keys = new int[]{100,90,120,60,78,35,42,21,15};
setHash(keys);
//存储哈希表
bool result = searchHash(100);
//寻找hash表中是否存在100的键值
//查找的原理是,打到该键应该在哈希表存储的位置,如果不在,则一直向后查找,直找到第一个空位置时即立即停止,因为若是存放时那么这里有一个空位置肯定要存放在这里的,否则就以查找到后报出存在的结果!
///该函数可以实现存储,将其中的数组按与11取余的情况存放在其中!如果该位置被占用时即寻找下一位置,直到寻找到空位置存入即可!
publci void setHash(int[] key)
{
foreach(int keyitem in key)
{
int sint = keyitem %hashkey;
int i =0;
while(hashtable[sint+i] != null)
{
i++;
}
hashtable[sint+i] = keyitem;
}
///该函数可以对特定键值进行查询,查询到即返回真,否则返回假
public bool searchHash(int key)
{
bool search = false;
int sint = key%hashkey;
int i = sint;
while(hashtable[i] != null)
{
if(i>hashtable.length)
i = 0;
if(hashtable[i] == key)
{
search = true;
break;
}
i++;
}
return seach;
}
//////////长时间不写C语言了,自己看着改一下吧!
其实数据结构的东西,你主要关注算法,算法出来了,其他的实现其实都是基本功了啊!
可用数组实现该散列。
有9个数据 要放到 长度为12的空间,可以采用模12的方法,如果模12后处在余数位置上没有元素,则把该元素放到此空间里,并打上空间被占用的标记;如果已经被占用,就继续往后搜索,直到找到一个没被占用的空间(注意:如果搜索到数组结束还没找到,则返回首地址继续搜索,直到对所有地址都遍历一遍)。这样就实现了散列。
搜索也一样,从模12后处在余数位置处开始搜索,如果匹配,则返回正确结果;如果不匹配,就继续往下搜索,如果找到了,就返回正确结果;如果直到找到下一个没被占用的空间,还没有匹配的数据,则表示没有该数据,返回错误结果,程序结束。
就这样吧。
程序嘛,好久没编程了,就不写了啊!