哈希表


之前写的丑哭了,今天刚学会博客如何使用。。。,实在是对不起大家的眼睛。。。。。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值