哈希表入门小demo

哈希表原理:用哈希函数把不同key分配在哈希桶(指针数组)的不同索引里,以达到不同的键值对分组效果
哈希表的组成:元素:键值对,哈希桶:实际就是指针数组(每个索引指向每组首元素);哈希函数

 

 

 hashStruct.h

#include <string>
#include<iostream>
#define HASH_MAX 5

typedef struct Element {
	int key;
	const char* value;
}Ele;
typedef struct List {
	Element element;
	List* nextList;
	List() {
		element.key = 0;
		element.value = '\0';
		nextList = nullptr;
	}
}HeadNode;
typedef struct HashBucket {
	size_t maxSize;
	List** hashBucketArray;
}HB;
int hashFunc(int key) {
	if (key<0) {
		std::cout << "key不能小于0";
		return -1;
	}
	return key % HASH_MAX;
}
bool initHashBucket(HashBucket* hashBucket) {
	if (NULL==hashBucket) {
		std::cout << "哈希桶为空";
		return 0;
	}
	hashBucket->maxSize = HASH_MAX;
	hashBucket->hashBucketArray = (List**)malloc(sizeof(List*) * hashBucket->maxSize);//返回哈希桶的地址
	if (NULL== hashBucket->hashBucketArray) {
		std::cout << "哈希桶分配内存失败";
		free(hashBucket->hashBucketArray);
		return 0;
	}
	List** initHashBucket = hashBucket->hashBucketArray;
	for (size_t i = 0; i < hashBucket->maxSize; ++i) {
		initHashBucket[i] = new List();//每个分配头节点
	}return 1;
}
bool addListNode(List* listNode, HashBucket* hashBucket) {
	if (!listNode||!hashBucket) {
		std::cout << "无法添加元素,其中一个参数为空"<<std::endl;
		return 0;
	}
	int postion=hashFunc(listNode->element.key);
	hashBucket->hashBucketArray[postion]->nextList = listNode;
	return 1;
}

 hash_main.c

测试demo:
#include"hashStruct.h"

//using namespace std;


int main() {
	HashBucket hashBucket;
	initHashBucket(&hashBucket);
	List list;
	list.element.key = 1;
	list.element.value = "凤姐";
	addListNode(&list, &hashBucket);
	std::cout << hashBucket.hashBucketArray[1]->nextList->element.key;
	system("pause");
	return 0;
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值