开地址哈希表,结构如下,采用双散列哈希函数,但事先要制定好哈希表的大小:
struct ohtbale{
positions : i32, //需要指定的哈希表大小(槽位个数)
size : i32,
table : Vec<Option<i32>>,
}
impl ohtbale{
//双散列哈希函数, k待插入的值,i当前探索位置, m槽位个数
// h(k,i) = (h1(k) + i*h2(k)) mod m
// h1(k) = k mod m; h2(k) = 1 + (k mod (m-2))
fn hashfunc(&self,data:i32,iexplore:i32) -> i32{
return (data % self.positions + iexplore*(1 + data % (self.positions - 2))) % self.positions;
}
fn lookup(&self,data:i32) -> bool{
for i in 0..self.positions{
let position = self.hashfunc(data,i);
if let Some(value)