hash表代码展示

转自https://www.cnblogs.com/s-b-b/p/6208565.html

.cpp文件

#include "HashList3.h"

int main(int argc, char const *argv[])
{
	HashTable *ht = new HashTable();
	const char* key[]={"a","b"};
	const char* value[]={"value1","value2"};
	for (int i = 0; i < 2; ++i)
	{
		ht->install(key[i],value[i]);
	}
	ht->display();
	return 0;
}


.h文件

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#define HASHSIZE 10
typedef unsigned int uint;
typedef struct Node{
	const char* key;
	const char* value;
	Node *next;
}Node;

class HashTable{
private:
	Node* node[HASHSIZE];
public:
	HashTable();
	uint hash(const char* key);
	Node* lookup(const char* key);
	bool install(const char* key,const char* value);
	const char* get(const char* key);
	void display();
};

HashTable::HashTable(){
	for (int i = 0; i < HASHSIZE; ++i)
	{
		node[i] = NULL;
	}
}

uint HashTable::hash(const char* key){
	uint hash=0;
	for (; *key; ++key)
	{
		hash=hash*33+*key;
	}
	return hash%HASHSIZE;
}

Node* HashTable::lookup(const char* key){
	Node *np;
	uint index;
	index = hash(key);
	for(np=node[index];np;np=np->next){
		if(!strcmp(key,np->key))
			return np;
	}
	return NULL;
}

bool HashTable::install(const char* key,const char* value){
	uint index;
	Node *np;
	if(!(np=lookup(key))){
		index = hash(key);
		np = (Node*)malloc(sizeof(Node));
		if(!np) return false;
		np->key=key;
		np->next = node[index];
		node[index] = np;
	}
	np->value=value;
	return true;
}

void HashTable::display(){
	Node* temp;
	for (int i = 0; i < HASHSIZE; ++i)
	{
		if(!node[i]){
			printf("[]\n");
		}else{
			printf("[");
			for (temp=node[i]; temp; temp=temp->next)
			{
				printf("[%s][%s] ",temp->key,temp->value );
			}
			printf("]\n");
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值