手寫雜湊表
點選上方藍字關注我,我們一起學程式設計
歡迎小夥伴們分享、轉載、私信、讚賞
微信搜尋:程式設計筆記本
微信搜尋:程式設計筆記本
微信搜尋:程式設計筆記本
是的,在面試深信服的時候,面試官讓我 10min 手寫雜湊表(/微笑)。沒錯,我沒寫出來,於是我自己花了 20*10min 自己寫了一個簡單的雜湊表出來。在這裡貼出來,小夥伴可以提提意見,交流一波~
#include <bits/stdc++.h>
using namespace std;
#define MAXSIZE 10 // 雜湊值
#define UNIONSIZE 100 // 共用體的字元長度
/* 雜湊表底層連結串列節點 */
template<typename K, typename V>
struct Node {
K key;
V value;
struct Node* next;
};
/* 用於計算雜湊值的共用體 */
template<typename K>
union Union {
K key;
char ch[UNIONSIZE];
Union(K _key) : key(_key) {}
};
/* 雜湊表類 */
template<typename K, typename V>
class HashTable {
private:
Node<K, V>* node[MAXSIZE]; // 底層連結串列
public:
HashTable(); // 建構函式
int hash(const K key); // 雜湊函式
Node<K, V>* lookup(const K key); // 查詢函式
void insert(const K key, const V value); // 插入函式
V get(const K key); // 訪問函式
};
/* 建構函式 */
/* 將雜湊表底層連結串列置空 */
template<typename K, typename V>
HashTable<K, V>::HashTable() {
for (int i = 0; i < MAXSIZE; ++i) {
node[i] = nullptr;
}
}
/* 雜湊函式 */
/* 簡單地利用共用體進行雜湊計算 */
template<typename K, typename V>
int HashTable<K, V>::hash(const K key) {
int hashValue = 0;
unsigned int len = sizeof(key) > UNIONSIZE ? UNIONSIZE : sizeof(key);
Union<K> u(key);
for (int i = 0; i < len; ++i) {
hashValue += u.ch[i];
}
return hashValue % MAXSIZE;
}
/* 查詢函式 */
template<typename K, typename V>
Node<K, V>* HashTable<K, V>::lookup(const K key) {
Node<K, V>* nd;
int hashValue = hash(key);
for (nd = node[hashValue]; nd != nullptr; nd = nd->next) {
if (nd->key == key) {
return nd;
}
}
return nullptr;
}
/* 插入函式 */
/* 若鍵已存在,則更新值;否則建立新的鍵值對 */
template<typename K, typename V>
void HashTable<K, V>::insert(const K key, const V value) {
Node<K, V>* nd = lookup(key);
if (nd == nullptr) {
int hashValue = hash(key);
nd = (Node<K, V>*)malloc(sizeof(Node<K, V>));
nd->key = key;
nd->next = node[hashValue];
node[hashValue] = nd;
}
nd->value = value;
}
/* 訪問函式 */
/* 若鍵存在,則返回其值;若鍵不存在,則插入鍵值對,並將值置為該型別的零值 */
template<typename K, typename V>
V HashTable<K, V>::get(const K key) {
V value = (V)(0);
Node<K, V>* nd = lookup(key);
if (nd == nullptr) {
insert(key, value);
nd = lookup(key);
}
return nd->value;
}
int main()
{
HashTable<int, int> hashTable;
hashTable.insert(1, 100);
hashTable.insert(2, 200);
cout << hashTable.get(1) << endl;
cout << hashTable.get(2) << endl;
cout << hashTable.get(3) << endl;
return 0;
}
/*
編譯執行:
jincheng@DESKTOP$ g++ test.cpp -o test
jincheng@DESKTOP$ ./test
100
200
0
jincheng@DESKTOP$
*/
小夥伴們有什麼好的點子或者意見,記得參與討論告訴我哦~
微信搜尋:程式設計筆記本
微信搜尋:程式設計筆記本
微信搜尋:程式設計筆記本
相關文章
- 雜湊表(雜湊表)原理詳解
- 雜湊表
- 【尋跡#3】 雜湊與雜湊表
- 雜湊表2
- 字串雜湊表字串
- 6.7雜湊表
- 線性表 & 雜湊表
- 十二、雜湊表(二)
- 十一、雜湊表(一)
- 雜湊表應用
- 雜湊表的原理
- JAVA 實現 - 雜湊表Java
- freeswitch APR庫雜湊表
- 【閱讀筆記:雜湊表】Javascript任何物件都是一個雜湊表(hash表)!筆記JavaScript物件
- Hash,雜湊,雜湊?
- 雜湊技術【雜湊表】查詢演算法 PHP 版演算法PHP
- 幾道和雜湊(雜湊)表有關的面試題面試題
- 【資料結構與演算法學習】雜湊表(Hash Table,雜湊表)資料結構演算法
- 資料結構——雜湊表資料結構
- 雜湊表的一點思考
- Python:說說字典和雜湊表,雜湊衝突的解決原理Python
- 七夕也要學起來,雜湊雜湊雜湊!
- 雜湊表:如何實現word編輯器的拼寫檢查?
- 菜鳥學Python之雜湊表Python
- iOS雜湊表快取窺探iOS快取
- Python 雜湊表的實現——字典Python
- 從Dictionary原始碼看雜湊表原始碼
- 雜湊表知識點小結
- 資料結構之「雜湊表」資料結構
- 雜湊表的兩種實現
- 資料結構 - 雜湊表,初探資料結構
- 雜湊表hashtable課堂筆記筆記
- C#雜湊表的例項C#
- 用 Golang 寫一個搜尋引擎(0x03)— 跳躍表,雜湊表Golang
- Day76.雜湊表、雜湊函式的構造 -資料結構函式資料結構
- 雜湊
- js 雜湊雜湊值的模組JS
- 資料結構基礎--雜湊表資料結構