HashTable.c
#include "stdio.h"
typedef char * Key;
typedef int Value;
typedef unsigned int Hash;
typedef struct Entry
{
struct Entry *next;
Hash hash; // key 对应的hash值
Key key;
Value value;
}Entry;
// 拉链法实现,也就是链表的数组.也是 数组和链表优势的结合
typedef struct HashTable{
Entry **head;
unsigned int size;
unsigned int usage;
}HashTable;
HashTable *create(unsigned int);
HashTable *put(HashTable *,Key,Value);
HashTable *putInHeads(HashTable *,Key,Value); // 数组
HashTable *putInLists(HashTable *,Key,Value); // 链表
Value find(HashTable *,Key );
HashTable*delete(HashTable *,Key );
void print(HashTable *);
Hash hashCode(Key); // 哈希函数
HashTable *create(unsigned int size){
HashTable *hashTable = malloc(sizeof(HashTable));
if(hashTable==NULL){
printf("malloc error\n");
return NULL;
}
hashTable->size=size;
hashTable->usage = 0;
hashTable->head = calloc(size,sizeof(Entry *));
return hashTable;
}
HashTable *put(HashTable *hashTable,Key key,Value value){
if (key==NULL)
{
return hashTable;
}
}
Value find(HashTable *hashTable,Key key){
}
void print(HashTable *hashTable){
Entry *entry;
for (int i = 0; i < hashTable->size; ++i)
{
entry = hashTable->head[i];
while(entry!=NULL){
printf("%s=%d\n",entry->key,entry->value);
entry=entry->next;
}
}
}
// ?????
Hash hashCode(char *key){
int offset = 5;
Hash hashCode = 0;
while(*key){
hashCode = (hashCode << offset) + (*key++);
}
return hashCode;
}
int main(){
return 0;
}