跳转至

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;
}