C語言實現乙個簡易的Hash table 二

2021-10-01 19:44:16 字數 1658 閱讀 3670

上一章,簡單介紹了hash table,並提出了本教程中要實現的幾個hash table的方法,有search(a, k)insert(a, k, v)delete(a, k),本章將介紹hash table使用的資料結構。

hash表中儲存的每一項key-value的資料結構:

// hash_table.h

typedef struct ht_item;

我們的hash表中儲存著乙個指向每一項的指標陣列,裡面還包括hash表的大小,結構如下:

// hash_table.h

typedef struct ht_hash_table;

hash表中,我們需要定義乙個函式來初始化一條記錄(ht_item),這個函式會為每一條記錄(ht_item)申請記憶體,然後將kv儲存在這個記憶體中。為了讓該函式只能在我們的hash table中使用,我們用static來修飾。

// hash_table.c

#include #include #include "hash_table.h"

static ht_item* ht_new_item(const char* k, const char* v)

ht_new初始化乙個新的hash表size表示這個hash表可以儲存多少條記錄,現在是固定的53條。我們將在後面講解如何擴充這個hash表,我們使用calloc函式來初始化一條記錄(如果對calloc不熟悉,可以看看我這篇文章:calloc會申請一片空間並用null來填充,記錄為null就代表空的。

// hash_table.c

ht_hash_table* ht_new()

我們還需要額外的函式來刪除ht_itemht_hash_table,這個函式會釋放(free)我們之前申請的記憶體空間,以至於不會造成記憶體洩漏:

// hash_table.c

static void ht_del_item(ht_item* i)

void ht_delete_hash_table(ht_hash_table* ht)

}free(ht->items);

free(ht);

}

現在,我們已經完成定義乙個hash表,現在我們可以試著建立乙個hash表並試著銷毀它,儘管現在並沒有做太多東西。

// main.c

#include hash_table.h

int main()

C語言實現乙個簡易的掃雷2

ifndef game h define game h define crt secure no warnings 1 include include include include define rows 11 define cols 11 define count 10 void init bo...

C語言實現乙個簡易的Hash table 三

上一章,我們講了hash表的資料結構,並簡單實現了hash表的初始化與刪除操作,這一章我們會講解hash函式和實現演算法,並手動實現乙個hash函式。本教程中我們實現的hash函式將會實現如下操作 我們將會設計乙個普通的字串hash函式,在偽 中表示如下 function hash string,a...

C語言實現乙個簡易的Hash table 六

上一章中,我們實現了hash表中的插入 搜尋和刪除介面,我們在初始化hash表時固定了大小為53,為了方便擴充套件,本章將介紹如何修改hash表的大小。現在,我們的hash表是固定大小 53 的,當插入越來越多資料時,我們的hash表就會被插滿,這個問題有兩個原因 雜湊表的效能隨著高衝突率而降低 我...