转自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");
}
}
}