之前写的丑哭了,今天刚学会博客如何使用。。。,实在是对不起大家的眼睛。。。。。
#include <iostream>
using namespace std;
#define SUCCESS 1
#define UNSUCCESS 0
#define HASHSIZE 12
#define NULLKEY -32768
typedef struct{
int *elem;//数据元素存储基址,动态分配数组
int count;//当前元素个数
}HashTable;
int m = 0;//散列表长度
bool initHashTable(HashTable * H){
m=HASHSIZE;
H->count= m;
H->elem=(int*)malloc(m*sizeof(int));
for (int i=0;i<H->count;i++)
{
H->elem[i] = NULLKEY;
}
return true;
}
int hash(int key){
return key%m;
}
// 插入哈希表
void insertHash(HashTable* H,int key){
int addr = hash(key);
while (H->elem[addr]!=NULLKEY)
{
addr = (addr+1)%m; //开放地址线性探测
}
H->elem[addr] = key;
// cout<<"key:"<<key<<endl;
cout<<"--------insertHash------key:"<<key<<" addr:"<<addr<<endl;
}
// 散列表查找关键字
bool searchHash(HashTable * H,int key,int *addr){
*addr = hash(key);//求散列地址
while(H->elem[*addr]!=key){
*addr = (*addr+1)%m;
//开放地址法线性探测,有两种情况:1.下一个地址为空,或者又走一圈回到初始位置
if (H->elem[*addr]==NULLKEY || *addr==hash(key))
{
return false;
}
}
// *addr = hash(key);
// while(H->elem[*addr]!=key){
// *addr = (*addr+1)%m;
// if (H->elem[*addr]==NULLKEY|| *addr==hash(key))
// {
// return false;
// }
// }
return true;
}
int main(){
cout<<"hello world"<<endl;
HashTable* H = new HashTable;
initHashTable(H);
insertHash(H,12);
insertHash(H,67);
insertHash(H,56);
insertHash(H,16);
int addr ;
searchHash(H,56,&addr);
cout<<"addr="<<addr<<endl;
// insertHash(H,12);
// insertHash(H,12);
// insertHash(H,12);
// insertHash(H,12);
return 0;
}