1.鄰接串列實作
2.用%來重新定義範圍
定義結構:
typedef struct hash{
int key;
int val;
struct hash *next;
}hash;
hash hashTable[1024];
Hash Funtion=
key=hashFuntion(x);
int HashFuntion(int x){
return x & 1023;//=X/1024
}
新增
void insert(int key,int val){
hash *node=malloc(sizeof(hash));
node->val=val;
node->key=key;
node->next=NULL;
hash *p=&hashTable[HashFuntion(key)];
while(p->next!=NULL){
p=p->next;
}
p->next=node;
}
查詢
int query(int key){
hash *p=&hashTable[HashFuntion(key)];
while(p!=NULL){
if(p->key==key) return p->val;
p=p->next;
}
return -1;
}
刪除
void delet(int key){
hash *p=&hashTable[HashFuntion(key)];
if(p->next->key==key){
hash *next=p->next->next;
free(p->next);
p->next=next;
return;
}
p=p->next;
while(p->next->next!=NULL&&p->next->key!=key){
p=p->next;
}
hash *next=p->next->next;
free(p->next);
p->next=next;
}
#include <unordered_map>
int top=0;
unordered_map<string,int> m;
int hashfunction(string str){ //回傳對應到的特定值
auto reault=m.find(str);
if(result!=m.end()){
return result->second;
}else{
m[str]=top++;
return top-1;
}
}
int main(){
int arr[1000]={0};
string target="abc";
int index=hashfunction(target);
arr[index]++;
return 0;
}