哈希链表的原理及算法实现

1 哈希链表的原理及算法实现

1.1 哈希表的原理

哈希表:散列表,它是基于快速存取的角度设计的,是一种典型的“空间换时间”的做法。

有如下一些概念:

  • 键(key): 可以是编号 如, 1 、 5 、 19 。 。 。
  • 值(value): 存储的值。
  • 索引:数组的下标(0,1,2,3,4) ,用以快速定位和检索数据。
  • 哈希桶:保存索引的数组(链表或数组),数组成员为每一个索引值相同的多个元素。
  • 哈希函数:将组key映射到索引上,可以采用求余法。

在这里插入图片描述

1.2 哈希链表的算法实现

哈希链表数据结构的定义:

#define DEFAULT_SIZE 16

typedef struct _ListNode
{
   
	struct _ListNode *next;
	int key;
	void *data;
}ListNode;

typedef ListNode *List;
typedef ListNode *Element;

typedef struct _HashTable
{
   
	int TableSize;
	List *Thelists;
}HashTable;

哈希函数:

/*根据 key 计算索引,定位 Hash 桶的位置*/
int Hash(int key, int TableSize)
{
   
	return (key%TableSize);
}

哈希链表初始化:

/*初始化哈希表*/
HashTable *InitHash(int TableSize)
{
   
	int i = 0;
	HashTable *hTable = NULL;
	
	if (TableSize <= 0) {
   
		TableSize = DEFAULT_SIZE;
	}
	

	hTable = (HashTable *)malloc(sizeof(HashTable));
	if (NULL == hTable)
	{
   
		printf("HashTable malloc error.\n");
		return NULL;
	}
	hTable->TableSize = TableSize;

	//为 Hash 桶分配内存空间,其为一个指针数组
	hTable->Thelists = (List *)malloc(sizeof
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值