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

在这里插入图片描述

#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; 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值