设为首页 加入收藏

TOP

开地址哈希表(Hash Table)的接口定义与实现分析
2018-01-17 13:05:22 】 浏览:81
Tags:地址 哈希 Hash Table 接口 定义 实现 分析

基本的操作包括:初始化开地址哈希表、销毁开地址哈希表、插入元素、删除元素、查找元素、获取元素个数。


各种操作的定义如下:


ohtbl_init


 int ohtbl_init (OHTbl *htbl, int positions, int (*h1) (const void *key), int (*h2)(const void *key),


                    int (*match)(const void *key1, const void *key2), void (*destroy)(void *data));


返回值  如果哈希表初始化成功,返回0;否则返回-1 。


描述  初始化开地址哈希表htbl。在对哈希表进行其他操作之前,必须首先进行初始化。


参数positions 指定表中的槽位个数。函数指针h1,h2用来指定用户定义的辅助哈希函数以完成双散列过程。函数指针match指向一个用户定义的函数,此函数用于判断两个键是否匹配,它的使用方法与chtbl_init中的match类似。函数指针destroy通过调用ohtbl_destroy来释放动态分配的内存空间,同样它与ohtbl_init中参数的使用方法类似。如果哈希函数表中的数据不需要释放,那么destroy应该指向NULL。


复杂度  O(m),m是哈希表中槽的个数。


ohtbl_destroy


 void ohtbl_destroy (OHTbl *htbl ) ;


返回值  无 。


描述  销毁htbl指定的开地址哈希表。在调用ohtbl_destroy之后不再允许进行其他操作,除非再次初始化。


ohtbl_destroy会删除哈希表中的所有元素,并同时释放ohtbl_init中参数destroy不为NULL的成员所占用的内存空间。


复杂度  O(m),m是哈希表中槽的个数。


ohtbl_insert


 int ohtbl_insert (OHTbl *htbl,const void *data ) ;


返回值  如果插入元素成功,返回0;如果哈希表中已经包含此元素,返回1;否则,返回-1 。


描述  向htbl指定的开地址哈希表中插入一个元素


新元素包含一个指向data的指针,因此只要元素仍然存在于哈希表中,此指针就一直有效。与data相关的空间将由函数的调用者来管理。


复杂度  O(1)。


ohtbl_remove


 int ohtbl_remove (OHTbl *htbl,const void **data ) ;


返回值  如果删除元素成功,返回0;否则,返回-1 。


描述  从htbl指定的开地址哈希表中删除与data匹配的元素


返回时,data指向已经删除元素中存储的数据。与data相关的内存空间将由函数调用者来管理。


复杂度  O(1)。


ohtbl_lookup


 int ohtbl_lookup (const OHTbl *htbl,const void **data ) ;


返回值  如果在表中找到元素,返回0;否则,返回-1 。


描述  查找htbl指定的开地址哈希表中是否有与data匹配的元素


如果找到,在函数返回时,data指向哈希表中相匹配元素的数据。


复杂度  O(1)。


ohtbl_size


 int ohtbl_size (const OHTbl *htbl ) ;


返回值  哈希表中元素的个数。


描述  获取哈希表中元素个数的宏


复杂度  O(1)。


实现分为两个文件,一是开地址哈希表的头文件,一是抽象数据类型的实现文件。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇二叉树的概念、算法简介及树的平衡 下一篇开地址哈希表(Hash Table)的接..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目