簡單的hash表實現
採用chaining法。
#define DIVIDOR 23
#define ELE_NUM 100#include<stdlib.h>
typedef struct t_node{
int value;
struct t_node *next;
} Node;
void build_table(Node **table, int size);
void print_table(Node **table, int size);
void delete_table(Node **table, int size);
int main(){
Node *table[DIVIDOR];
printf("buliding table.\n");
build_table(table, DIVIDOR);
printf("print content of table:\n");
print_table(table, DIVIDOR);
printf("free table space.\n");
delete_table(table, DIVIDOR);
}
void build_table(Node **table, int size){
int i;
int pos = -1;
int val = -1;
Node *pt = 0;
Node *before = 0;
memset(table, 0, size * sizeof(Node*));
for(i = 0; i < ELE_NUM; ++i){
val = rand();
pos = val % DIVIDOR;
if(!table[pos]){
pt = (Node*)malloc(sizeof(Node));
pt->value = val;
pt->next = 0;
table[pos] = pt;
} else {
pt = table[pos];
while(pt){
before = pt;
pt = pt->next;
}
pt = (Node*)malloc(sizeof(Node));
pt->value = val;
pt->next = 0;
before->next = pt;
}
}
}
void print_table(Node **table, int size){
int i = 0;
Node *pt = 0;
printf("pointers in table:\n");
for(i = 0; i < size; ++i){
printf("%p ", table[i]);
}
printf("\n");
for(i = 0; i < size; ++i){
printf("table[%d]:\t", i);
pt = table[i];
while(pt){
printf("%d ", pt->value);
pt = pt->next;
}
printf("\n");
}
}
void delete_table(Node **table, int size){
int i = 0;
Node *pt = 0, *next = 0;
for(i = 0; i < size; ++i){
pt = table[i];
while(pt){
next = pt->next;
free(pt);
pt = next;
}
}
}