HashTable C 實現之開放定址法

2021-09-29 08:12:48 字數 1622 閱讀 9274

解決hashtable的衝突的第二種方法叫做開放定址法。開放定址法不需要使用指標,不需要特意的動態分配空間。當發生衝突時此演算法會選擇其他的空的單元。因此核心問題來了,怎麼有效的選擇空的單元呢?

原理:對hashtable進行插入時,出現index相同時,我們在原始index的基礎上加f(i)。但是問題又來了,因為f(i)為線性函式,它會連續的insert元素,因此會出現很多元素的聚集現象,我們也叫做一次聚集。怎麼解決呢?往下看哦~

原理:對hashtable進行插入時,出現index相同時,我們在原始index的基礎上加f(i)。但是問題又來了,因為f(i)為平方函式,雖然不會連續的insert元素,但是會出現二次聚集現象。怎麼解決呢?可使用雙雜湊進行,本篇不詳細討論了。

hashtable完整原始碼如下:

#include#includetypedef size_t index;

typedef std::string elemtype;

const size_t maxsize = 11;

enum class kindofentry;

struct hashunit ;

struct hashtab ;

class hashtable ;

~hashtable()

public:

index find(const elemtype key)const;

void insert(const elemtype key);

void delete(const elemtype key);

void display()const;

private:

index hash_one(const elemtype key)const;

index hash_two(const elemtype key)const;

index hash_three(const elemtype key)const;

private:

std::unique_ptrhashtable;

};index hashtable::hash_one(const elemtype key)const

return hashval % hashtable->tablesize;

}index hashtable::hash_two(const elemtype key)const

index hashtable::hash_three(const elemtype key)const

return hashval % hashtable->tablesize;

}index hashtable::find(const elemtype key)const

return index;

}void hashtable::insert(const elemtype key)

}void hashtable::delete(const elemtype key)

void hashtable::display()const

}int main(void)

HashTable C 實現之分離鏈結法

hashtable是以常數時間進行進行插入,刪除和查詢的資料結構。其查詢原理是 通過雜湊函式hash 進行雜湊得到value,value為雜湊表的下表。怎麼能得到均衡的value呢?hash 雜湊一般是通過字串對映到鍵值 index hashtable hash one const elemtype...

ubuntu開放ssh實現遠端登入

ssh分為客戶端openssh client和伺服器端openssh server 可執行下面命令進行安裝 sudo apt get install openssh client openssh server要想給其他機器提供ssh遠端登入,則必須安裝伺服器端server,並保證sshd服務正常執行...

開放定址法實現雜湊表

使用分離鏈結法實現雜湊表時需要額外的空間來儲存指標,而且需要給新單元動態分配空間,導致演算法的速度減慢。開放定址法一次分配表的大小,可以使用線性雜湊,平方雜湊,雙重雜湊等等方法,這些方法除了雜湊函式不相同之外,對於雜湊表的大小要求也不一樣。平方雜湊需要使表的大小是儲存元素的兩倍以上,這樣總能找到空槽...