C语言实现散列表(哈希Hash表)实例详解

C语言实现散列表(哈希Hash表)

实例代码:

//散列表查找算法(Hash)

#include <stdio.h>

#include <stdlib.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define SUCCESS 1

#define UNSUCCESS 0

#define HASHSIZE 7

#define NULLKEY -32768

typedef int Status;

typedef struct

{

int *elem; //基址

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

}HashTable;

int m=0; // 散列表表长

/*初始化*/

Status Init(HashTable *hashTable)

{

int i;

m=HASHSIZE;

hashTable->elem = (int *)malloc(m * sizeof(int)); //申请内存

hashTable->count=m;

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

{

hashTable->elem[i]=NULLKEY;

}

return OK;

}

/*哈希函数(除留余数法)*/

int Hash(int data)

{

return data % m;

}

/*插入*/

void Insert(HashTable *hashTable,int data)

{

int hashAddress=Hash(data); //求哈希地址

//发生冲突

while(hashTable->elem[hashAddress]!=NULLKEY)

{

//利用开放定址的线性探测法解决冲突

hashAddress=(++hashAddress)%m;

}

//插入值

hashTable->elem[hashAddress]=data;

}

/*查找*/

int Search(HashTable *hashTable,int data)

{

int hashAddress=Hash(data); //求哈希地址

//发生冲突

while(hashTable->elem[hashAddress]!=data)

{

//利用开放定址的线性探测法解决冲突

hashAddress=(++hashAddress)%m;

if (hashTable->elem[hashAddress]==NULLKEY||hashAddress==Hash(data)) return -1;

}

//查找成功

return hashAddress;

}

/*打印结果*/

void Display(HashTable *hashTable)

{

int i;

printf("\n//==============================//\n");

for (i=0;i<hashTable->count;i++)

{

printf("%d ",hashTable->elem[i]);

}

printf("\n//==============================//\n");

}

int main()

{

int i,j,result;

HashTable hashTable;

int arr[HASHSIZE]={13,29,27,28,26,30,38};

printf("***************Hash哈希算法***************\n");

//初始化哈希表

Init(&hashTable);

//插入数据

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

{

Insert(&hashTable,arr[i]);

}

Display(&hashTable);

//查找数据

result= Search(&hashTable,29);

if (result==-1)

printf("对不起,没有找到!\n");

else

printf("29在哈希表中的位置是:%d\n",result);

return 0;

}

实现:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

以上是 C语言实现散列表(哈希Hash表)实例详解 的全部内容, 来源链接: utcz.com/z/358211.html

回到顶部