hashtable,哈希表,一种可以快速查找信息的数据结构,看song的代码学会的,我自己写的和他的基本一样。。
所以这是转载、、
vector(看着方便,慢,一般不用):
#include<cstdio>
#include<vector>
#include<string>
#include<iostream>
using namespace std;
/*int abs(int x){
return x>0?x:-x;
}*/
int abs(int x)
{
return x%0x7fffffff;
}
const int Mod=1000003;
struct HashTable{
vector<int> vis[Mod];// hash table
int hash(int x){// return the value of hash
return abs(x)%Mod;
}
bool find(int x){ // whether x is in it
int value = hash(x);
for(int i=0;i<vis[value].size();i++){
int y = vis[value][i];
if(y==x)
return true;
}
return false;
}
void insert(int x){
int value = hash(x);
vis[value].push_back(x);
}
void clear(){
for(int i=0;i<Mod;i++)
vis[i].clear();
}
}table;
链式向前星(常用):
#include <cstdio>
#include <iostream>
#include <cstring>
#include <set>
#include <map>
using namespace std;
int abs(int x)
{
return x%0x7fffffff;
}
const int Mod = 1000003;
const int maxm= 2000000;
struct Vis
{
int w,next;
}vis[maxm];
int top=0;
int head[Mod];
struct HashTable
{
int hash(int x)
{
return abs(x)%Mod;
}
bool find(int x)
{
int value=hash(x);
for(int i=head[value];i!=-1;i=vis[i].next)
{
if(x==vis[i].w)
return true;
}
return false;
}
void insert(int x)
{
int value=hash(x);
vis[top]=(Vis){x,head[value]};
head[value]=top++;
}
void clear()
{
memset(head,-1,sizeof(head));
top=0;
}
}table;