【模板】哈希表

#include<iostream>
#include<stdio.h>
using namespace std;
struct hash_tables{
	unsigned long long self_code=0;
	int self_P=100007;
	int self_base=26;
	struct sl{
		string self_z;
		int next;
	}e[100007];
	int head[100007],cnt;
	void clear(){
		for(int i=0;i<self_P;i++)
			head[i]=0;
		cnt=0;
	}
	int encode(string self_x){
		self_code=0;
		int len=self_x.size();
		for(int i=0;i<len;i++)
			self_code*=self_base,
			self_code+=self_x[i];
		return self_code%self_P;
	}
	void add(string self_x,int code){
		cnt++;
		e[cnt].next =head[code];
		e[cnt].self_z =self_x;
		head[code]=cnt;
	}
	bool check(string self_x,int code){
		for(int i=head[code];i;i=e[i].next)
			if(e[i].self_z==self_x)return true;
		return false;
	}
};

int main(){
	hash_tables a;
	a.add("Hello! World",a.encode("Hello! World"));
	cout<<" "<<a.check("Hello! World",a.encode("Hello! World") );
	a.clear();
	cout<<" "<<a.check("Hello! World",a.encode("Hello! World") );
	return 0;
}

clear函数:清空当前表中所有元素

encode函数:可以自定义,返回传入元素的唯一hash码)

check函数:检查表中元素格式为check(查询的元素,元素的唯一hash码)

add函数:表中插入数据格式为add(查询的元素,元素的唯一hash码)

自由使用时可以修改带有self变量名的类型

修改和删除操作可以在结构体sl中绑定映射信息,修改之

事实上不封装更好

#include<iostream>
#include<stdio.h>
using namespace std;

	unsigned long long self_code=0;
	int self_P=10000007;
	int self_base=26;
	struct sl{
		string self_z;
		int next;
	}e[10000007];
	int head[10000007],cnt;
	void clear(){
		for(int i=0;i<self_P;i++)
			head[i]=0;
		cnt=0;
	}
	int encode(string self_x){
		self_code=0;
		int len=self_x.size();
		for(int i=0;i<len;i++)
			self_code*=self_base,
			self_code+=self_x[i];
		return self_code%self_P;
	}
	void add(string self_x,int code){
		cnt++;
		e[cnt].next =head[code];
		e[cnt].self_z =self_x;
		head[code]=cnt;
	}
	bool check(string self_x,int code){
		for(int i=head[code];i;i=e[i].next)
			if(e[i].self_z==self_x)return true;
		return false;
	}


int main(){
	
	add("Hello! World",encode("Hello! World"));
	cout<<" "<<check("Hello! World",encode("Hello! World") );
	clear();
	cout<<" "<<check("Hello! World",encode("Hello! World") );
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值