資料結構與演算法 雜湊表(hash)

2021-10-05 16:30:05 字數 2864 閱讀 9523

雜湊表是根據關鍵碼值(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乙個特別模糊的概念,今天我們就來詳細的說說它的結構。雜湊錶用的是陣列支援按照下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演...