【算法解释】:哈希查找法又称为散列表
【引入问题】:假设一家杂物店,有顾客来买东西,你得从本子中找到价格。但是随着商品的增加,使用二分法,无法做到顾客想问任何商品的价格,就立即回答。这时候就需要用到哈希表。
【解决冲突】:散列是能一种快速实现访问的存储方式。通常作为检索部分的数据项是整形或者字符串,当是字符串时,字符串的数量要远远大于数组的长度,这时候就会有多个字符串映射到一个存储位置的情况,这就是所谓的冲突问题,而且冲突时肯定存在的,这时候如何实现数据的存储又是需要解决的。
【程序设计】:
/* 散列表查找算法(hash) */
#define HASHSIZE 7
#define NULLKEY -32768
typedef int Status;
typedef struct
{
int *elem; /* 基址 */
int count; /* 当前数据元素个数 */
}HashTable;
uint8_t m = 0; /* 散列表表长 */
/* 初始化 */
Status Init(HashTable *hashTable)
{
uint8_t i;
m = HASHSIZE;
hashTable->elem = (uint8_t *)malloc(m * sizeof(int));
hashTable->count = m;
for( i = 0; i < m; i++ )
{
hashTable->elem[i] = NULLKEY;
}
return TRUE;
}
/* 哈希函数(除留余数法) */
uint8_t Hash(uint8_t data)
{
return data % m;
}
/* 插入 */
void