雜湊表是根據關鍵碼值(key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中乙個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做雜湊表。給定表m,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的位址,則稱表m為雜湊(hash)表,函式f(key)為雜湊(hash) 函式。
常見的雜湊函式有:
俗話說:筆下見真功夫。我們來道題試試,練練手。來自leetcode的 146. lru快取機制實現
#define nothingness -1
struct node
;//雙向鍊錶
struct hash
;//雜湊表結構
typedef
struct
lrucache;
struct hash*
hashmap
(struct hash* table,
int key,
int capacity)
void
headinsertion
(struct node* head,
struct node* cur)
else
}}
lrucache*
lrucachecreate
(int capacity)
*/ lrucache* obj =
(lrucache*
)malloc
(sizeof
(lrucache));
obj->table =
(struct hash*
)malloc
(capacity *
sizeof
(struct hash));
memset
(obj->table,
0, capacity *
sizeof
(struct hash));
obj->head =
(struct node*
)malloc
(sizeof
(struct node));
obj->tail =
(struct node*
)malloc
(sizeof
(struct node));
//建立頭、尾結點並初始化
obj->head->prev =
null
; obj->head->next = obj->tail;
obj->tail->prev = obj->head;
obj->tail->next =
null
;//初始化快取 大小 和 容量
obj->size =0;
obj->capacity = capacity;
return obj;
}
int
lrucacheget
(lrucache* obj,
int key)
while
( addr->next !=
null
&& addr->unused->key != key)
if(addr->unused->key == key)
return nothingness;
}
void
lrucacheput
(lrucache* obj,
int key,
int value)
ptr->next = remove->next;
//在 table[last->key % capacity] 鍊錶中刪除結點
remove->next =
null
; remove->unused =
null
;//解除對映
free
(remove)
;//**資源
struct hash* new_node =
(struct hash*
)malloc
(sizeof
(struct hash));
new_node->next = addr->next;
//連線到 table[key % capacity] 的鍊錶中
addr->next = new_node;
new_node->unused = last;
//最大化利用雙鏈表中的結點,對其重對映(節約空間)
last->key = key;
//重新賦值
last->value = value;
headinsertion
(obj->head, last)
;//更新最近使用的資料
}else
}else
}void
lrucachefree
(lrucache* obj)
嚴蔚敏《資料結構與演算法(c語言版)》
《資料結構與演算法》《基礎》Hash雜湊
1.hash的基本原理 總共有m 1個桶,hash key 指向乙個特定的桶。2.hash function雜湊函式 略3.雜湊衝突及解決 閉合定址 closed addressing linked list chaining 每個桶存放乙個指標,衝突的詞條組織成列表。新進來的插在第乙個和第二個之間...
資料結構之雜湊(hash)表
最近看php陣列底層結構,用到了雜湊表,所以還是老老實實回去看結構,在這裡去總結一下。這裡先說一下雜湊 hash 表的定義 雜湊表是一種根據關鍵碼去尋找值的資料對映結構,該結構通過把關鍵碼對映的位置去尋找存放值的地方,說起來可能感覺有點複雜,我想我舉個例子你就會明白了,最典型的的例子就是字典,大家估...
計算與資料結構篇 雜湊表 Hash
丟擲問題 word 的這個單詞拼寫檢查功能,雖然很小但卻非常實用。你有沒有想過,這個功能是如何實現的呢?在初學php的時候,第一次聽說hash table乙個特別模糊的概念,今天我們就來詳細的說說它的結構。雜湊錶用的是陣列支援按照下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演...