//
// main.cpp
// Hash
//
// Created by duanqibo on 2019/7/12.
// Copyright © 2019年 duanqibo. All rights reserved.
// 哈希函数,用于查找
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
//#define int DataType
#define HASHSIZE 12
#define NULLKEY -1
struct HashTable
{
int *elem;
int count;
};
//初始化哈希表
int InitHashTable(HashTable &pHashTable)
{
pHashTable.count=0;
pHashTable.elem=new int[HASHSIZE];//分配整型数组11个
for(int i=0;i<HASHSIZE;i++)
pHashTable.elem[i]=-1; //全部元素初始化为-1
return 1;
}
//哈希函数
int Hash(int key)
{
return key % HASHSIZE; //除留余数法
}
//插入关键字到哈希表
int InsertHashTable(HashTable &pHashTable,int key)
{
int addr=Hash(key); //求hash地址
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 argc, const char * argv[]) {
// insert code here...
HashTable hashTable;
InitHashTable(hashTable);
int a[10]={4,5,6,4,8,14,10,23,12,16};
for(int i=0;i<10;i++)
InsertHashTable(hashTable, a[i]);//将这些数插入到哈希表中 //将数组元素插入hash表
printf("哈希表中数的顺序为: ");
for(int i=0;i<HASHSIZE;i++)
printf("%4d",hashTable.elem[i]);
printf(" 请输入要查找的元素值: ");
int number;
scanf("%d",&number);
int addr;
if(!SearchHashTable(hashTable, number, &addr))
{
printf("这些数中没有你要查找的数! ");
}
else
printf("这些数中有你要查的数,元素的位置为:%d ",addr);
return 1;
}
运行结果: