c语言hash存储,C语言实现HashTable(一) 介绍
說(shuō)明
Hash table翻譯過(guò)來(lái)就是Hash表,是一種提供了類似于關(guān)聯(lián)數(shù)組的數(shù)據(jù)結(jié)構(gòu),可以通過(guò)key執(zhí)行搜索、插入和刪除操作。Hash表由一些列桶(buckets)組成,而每一個(gè)bucket都是由key-value的形式組成。存儲(chǔ)時(shí)都是以key-value存儲(chǔ)的,因?yàn)楫?dāng)要定位一個(gè)value時(shí),需要把key傳給一個(gè)散列函數(shù)(hash函數(shù)),這個(gè)函數(shù)返回一個(gè)數(shù)(索引),代表查找的value位于哪一個(gè)bucket中。同理,當(dāng)我們要從所有的buckets中取回key-value時(shí),一樣是先把key傳給散列函數(shù),再由返回的索引取到value。
在數(shù)組中,通過(guò)下標(biāo)(索引)獲取值時(shí),復(fù)雜度為O(1),所以Hash表上查找和存儲(chǔ)數(shù)據(jù)會(huì)很快。
我們這個(gè)簡(jiǎn)易的Hash表會(huì)使用字符串作為key和value,這種方法也適用于任意其他類型的key和value。本教程只支持ASCII中的字符串,unicode類型比較復(fù)雜已經(jīng)超出了本教程的范圍。
本教程中的Hash表支持的API
本教程中,關(guān)聯(lián)數(shù)組是一個(gè)未排序過(guò)的key-value集合,不允許重復(fù)的key,支持一下操作:
search(a, k): 如果關(guān)聯(lián)數(shù)組a中存在k對(duì)應(yīng)的v,就返回v,不存在就返回NULL
insert(a, k, v): 向關(guān)聯(lián)數(shù)組a中插入k-v
delete(a, k): 根據(jù)k刪除一條記錄,如果k不存在則什么也不做
本教程代碼目錄結(jié)構(gòu)
本教程中所有的代碼都會(huì)按如下目錄結(jié)構(gòu)存放:
.
├── build
└── src
├── hash_table.c
├── hash_table.h
├── prime.c
└── prime.h
src目錄存放我們的源代碼,build目錄存放編譯過(guò)的二進(jìn)制文件。
教程中的一些名詞解釋
本文中所涉及到的一些名詞解釋:
關(guān)聯(lián)數(shù)組:實(shí)現(xiàn)了上面的API的一種抽象數(shù)據(jù)結(jié)構(gòu),也稱映射(Map)、符號(hào)表(symbol table)或字典(dictionary)
Hash表:使用了散列函數(shù)實(shí)現(xiàn)關(guān)聯(lián)數(shù)組的一種數(shù)據(jù)結(jié)構(gòu),也稱為哈希映射,映射,哈希或字典
關(guān)聯(lián)數(shù)組可以用許多不同的底層數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。可以通過(guò)簡(jiǎn)單地將值存儲(chǔ)在數(shù)組中并在搜索時(shí)迭代數(shù)組來(lái)實(shí)現(xiàn)(非高性能的)。關(guān)聯(lián)數(shù)組和散列表經(jīng)常被混淆,因?yàn)殛P(guān)聯(lián)數(shù)組經(jīng)常被實(shí)現(xiàn)為散列表。
總結(jié)
以上是生活随笔為你收集整理的c语言hash存储,C语言实现HashTable(一) 介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 乘积的C语言,c语言矩阵相乘
- 下一篇: cmi编码用c语言实现,CMI编码与解码