首页 > 其他 > 详细

实践6.2

时间:2020-07-17 23:23:28      阅读:60      评论:0      收藏:0      [点我收藏+]

Hash函数的实现(线性探测法,除留余数法)

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define HASHSIZE 12
#define NULLKEY -1
struct HashTable
{
int *elem;
int count;
};

//初始化哈希表
int InitHashTable(HashTable &pHashTable)
{
pHashTable.count=0;
pHashTable.elem=new int[HASHSIZE]; //分配整型数组
for(int i=0;i<HASHSIZE;i++)
pHashTable.elem[i]=-1;
return 1;
}

//哈希函数
int Hash(int key)
{
return key % HASHSIZE; //除留余数法
}

//插入关键字到哈希表
int InsertHashTable(HashTable &pHashTable,int key)
{
int addr=Hash(key); //求哈希地址
while(pHashTable.elem[addr]!=-1)
addr=(addr+1)%HASHSIZE; //线性探测
pHashTable.elem[addr]=key;
pHashTable.count++;
return 1;
}


//在哈希表中查找关键字
int SearchHashTable(HashTable pHashTable,int key,int *address)
{
*address=Hash(key);
while(pHashTable.elem[*address]!=key)
{
*address=(*address+1)%HASHSIZE; //线性探测
if(pHashTable.elem[*address]==-1 || *address==Hash(key))
return 0;
}
return 1;
}

int main()
{
int i;
HashTable hashTable;
InitHashTable(hashTable);
int a[10]={4,5,6,4,8,14,10,23,12,16};
for(i=0;i<10;i++)
InsertHashTable(hashTable,a[i]); //插入这些值到hash表
printf("哈希表中数的顺序为:\n");
for(i=0;i<HASHSIZE;i++)
printf("%4d",hashTable.elem[i]);

printf("\n请输入要查找的元素值:\n");
int number;
scanf("%d",&number);
int addr;
if(!SearchHashTable(hashTable,number,&addr))
{
printf("这些数中没有你要查找的数!\n");
}
else
printf("这些数中有你要查的数,元素的位置为:%d\n",addr);
return 1;
}

运行结果:

技术分享图片

 

实践6.2

原文:https://www.cnblogs.com/duanqibo/p/13332837.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!