前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >哈希游戏化:系统开发时哈希表查找算法的实现

哈希游戏化:系统开发时哈希表查找算法的实现

原创
作者头像
KFZ433
发布2022-06-21 14:25:55
3300
发布2022-06-21 14:25:55
举报
文章被收录于专栏:NFT链游的应用NFT链游的应用

哈希表查找算法的实现

首先定义一个散列表的结构以及一些相关的常数。其中,HashTables是散列表结构。结构当中的elem为一个动态数组。

#define SUCCESS 1

#define UNSUCCESS 0

#define HASHSIZE 12 /*定义哈希表长为数组的长度*/

#define NULLKEY -32768

{

int *elem; /*数组元素存储基址,动态分配数组*/

int count; /*当前数据元素的个数*/

}HashTable;

int m = 0;

初始化哈希表

/*初始化哈希表*/

Status InitHashTable(HashTable *H)

{

int i;

m = HASHSIZE;

H->count = m;

H->elem = (int *)malloc(m*sizeof(int));

for(i = 0;i<m;i++)

H->elem[i] = NULLKEY;

return OK;

}

定义哈希函数

/*哈希函数*/

int Hash(int key)

{

return key % m; /*除留取余法*/

}

插入操作

/*将关键字插入散列表*/

void InsertHash(HashTable *H,int key)

int addr = Hash(Key); /*求哈希地址*/

while(H->elem[addr] != NULLKEY) /*如果不为空则冲突*/

addr = (addr + 1) % m; /*线性探测*/

H->elem[addr] = key; /*直到有空位后插入关键字*/

查找操作

/*查找*/

Status SearchHash(HashTable H,int key,int *addr)

{

*addr = Hash(key); /*求哈希地址*/

while(H.elem[*addr] != key) /*若不为空,则冲突*/

*addr = (*addr + 1) % m; /*线性探测*/

if(H.elem[*addr) == NULLKEY || *addr == Hash(key))

{/*如果循环回到原点*/

return UNSUCCESS; /*则说明关键字不存在*/

}

return SUCCESS;

}

7、总结

1、哈希表就是一种以键值对存储数据的结构。

2、哈希表是一个在空间和时间上做出权衡的经典例子。如果没有内存限制,那么可以

直接将键作为数组的索引。那么所查找的时间复杂度为O(1);如果没有时间限制,那么我们可以使用无序数组并进行顺序查找,这样只需要很少的内存。哈希表使用了适度的时间和空间来在这两个极端之间找到了平衡。只需要调整哈希函数算法即可在时间和空间上做出取舍。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档