【数据结构】(散列表)哈希表的构造

主宰稳场 提交于 2020-01-14 02:30:25

在这里插入图片描述

#include < iostream >
#include < iomanip >
using namespace std;

#define NUM 12 // 元素个数
#define HASHSIZE 16 // 哈希表长度
#define MOD 13 // 哈希表可选地址

// 线性处理冲突
void collision(int &p,int c)
{

p = (p+1) % HASHSIZE;

}

//查询函数
int searchHash(int hs[],int key,int &p,int &c,void(*cp)(int &,int))
{

p = key % MOD;
while(hs[p]!=NULL && hs[p]!=key){  // 当对应位置不为空,且不为key时,冲突处理 
	cp(p,++c); // 冲突次数 c 加一 
}
if(hs[p]==key){
	return 1; 
} 
else if(hs[p]==0)
    return 0;

}

// 插入函数
int insertHash(int hs[],int key)
{

int p,c=0;  // c 保存冲突次数,p 保存元素的存储位置
if(searchHash(hs,key,p,c,collision)) {
	return 0;
}
else if(c<HASHSIZE/2){
	hs[p] = key;
	return 1;  // 插入成功 
}
else return -1; // 其他情况异常插入失败 

}

int main()
{

int hs[HASHSIZE] = {0};
int a[NUM] = {19,14,23,1,68,20,84,27,5,11,10,79};
for(int i=0;i<NUM;i++){  // 将每一个元素插入哈希表中 
	insertHash(hs,a[i]);
}
for(int i=0;i<HASHSIZE;i++){  // 依次将哈希表中的每一个位置的序号打印出来 
	cout<<setw(3)<<left<<i; 
}
cout<<endl;
for(int i=0;i<HASHSIZE;i++){  // 依次将哈希表中的每一个位置的元素打印出来 
	cout<<setw(3)<<left<<hs[i]; 
}
cout<<endl;
return 0; 

}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!