散列表 开放寻址法
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
#define NULL 0
const N=10;
int array[N];
void Init()
{
for(int i=0;i<N;i++)
array[i]=NULL;
}
int h(int b,int s)
{
srand(time(0));
int U=rand()%s;
return (U+b)%s;
}
int HASH_INSERT(int a[],int k,int size)//size为散列表长度 k为插入的关键字 a为要插入的表
{
int j=0;
int i=0;
while(i!=size)
{
j=h(i,size);//h为散列函数
if(a[j]==NULL)
{
a[j]=k;
return j;
}
else
i=i+1;
}
if(i>size)
cout<<"Hash table overflow!";
}
int HASH_SEARCH(int a[],int k1,int size1)//查找关键字k1
{
int j=0;
int i=0;
do
{
j=h(i,size1);
if(a[j]==k1)
return j;
i=i+1;
}while(a[j]!=NULL||i!=size1);
}
void show(int a[],int b)
{
for(int i=0;i<N;i++)
cout<<a[i]<<' ';
cout<<endl;
}
int main()
{
int number=0;
Init();
cout<<"Enter number pleace: ";
while(cin>>number)
{
int a=HASH_INSERT(array,number,N);
cout<<"散列的位置为"<<a+1<<' ';
}
cout<<endl;
show(array,N);
int key;
cout<<"请输入要查找的关键字: ";
cin.clear();
while(cin.get()!='\n');
cin>>key;
int b=HASH_SEARCH(array,key,10);
if(b==NULL)
cout<<"没有!";
else
cout<<key<<"的位置为"<<b+1<<endl;
return 0;
}