日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言hash存储,C语言实现HashTable(一) 介绍

發布時間:2024/4/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言hash存储,C语言实现HashTable(一) 介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明

Hash table翻譯過來就是Hash表,是一種提供了類似于關聯數組的數據結構,可以通過key執行搜索、插入和刪除操作。Hash表由一些列桶(buckets)組成,而每一個bucket都是由key-value的形式組成。存儲時都是以key-value存儲的,因為當要定位一個value時,需要把key傳給一個散列函數(hash函數),這個函數返回一個數(索引),代表查找的value位于哪一個bucket中。同理,當我們要從所有的buckets中取回key-value時,一樣是先把key傳給散列函數,再由返回的索引取到value。

在數組中,通過下標(索引)獲取值時,復雜度為O(1),所以Hash表上查找和存儲數據會很快。

我們這個簡易的Hash表會使用字符串作為key和value,這種方法也適用于任意其他類型的key和value。本教程只支持ASCII中的字符串,unicode類型比較復雜已經超出了本教程的范圍。

本教程中的Hash表支持的API

本教程中,關聯數組是一個未排序過的key-value集合,不允許重復的key,支持一下操作:

search(a, k): 如果關聯數組a中存在k對應的v,就返回v,不存在就返回NULL

insert(a, k, v): 向關聯數組a中插入k-v

delete(a, k): 根據k刪除一條記錄,如果k不存在則什么也不做

本教程代碼目錄結構

本教程中所有的代碼都會按如下目錄結構存放:

.

├── build

└── src

├── hash_table.c

├── hash_table.h

├── prime.c

└── prime.h

src目錄存放我們的源代碼,build目錄存放編譯過的二進制文件。

教程中的一些名詞解釋

本文中所涉及到的一些名詞解釋:

關聯數組:實現了上面的API的一種抽象數據結構,也稱映射(Map)、符號表(symbol table)或字典(dictionary)

Hash表:使用了散列函數實現關聯數組的一種數據結構,也稱為哈希映射,映射,哈希或字典

關聯數組可以用許多不同的底層數據結構實現。可以通過簡單地將值存儲在數組中并在搜索時迭代數組來實現(非高性能的)。關聯數組和散列表經常被混淆,因為關聯數組經常被實現為散列表。

總結

以上是生活随笔為你收集整理的c语言hash存储,C语言实现HashTable(一) 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。