数据结构之哈希表

哈希表的数据结构

#define SUCCESS	1
#define UNSUCCESS 0
#define HASHSIZE 12	/*定义散列表的长为数组的长度*/
#define NULLKEY -32768

typedef struct HashTable
{
	int *elem;	/*数据元素存储基址,动态分配数组*/
	int count;	/*当前数据元素个数*/

}HashTable;
int m = 0;	/*散列表表长,全局变量*/

初始化哈希表

int 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 0;
}

哈希函数

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;	/*直到有空位后插入关键字*/
}

哈希表查找关键字

int 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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值