#include <stdio.h> #define SIZE 100000 typedef struct node{ int key; struct node* next; struct node* pre; }Node; Node HashTable[SIZE + 10]; Node HashPool[SIZE + 10]; int HashIndex = 0; Node* getnew(){ return &HashPool[HashIndex++]; } void insertnode(int key, Node*newnode){ Node * dst = &HashTable[key]; newnode->pre = dst; newnode->next = dst->next; dst->next = newnode; dst->next->pre = newnode; } int getkey(int val){ return val % (SIZE + 3); } void deletenode(Node*x){ x->pre->next = x->next; x->next->pre = x->pre; } Node* searchnode(Node* node){ int key = getkey(node->key); Node* x = HashTable[key].next; while (x != &HashTable[key] && x->key != key){ x = x->next; } return x; } void initHash(){ HashIndex = 0; for (int i = 0; i < SIZE; i++){ HashTable[i].key = 0; HashTable[i].next = &HashTable[i]; HashTable[i].pre = &HashTable[i]; } } int main(){ initHash(); for (int i = 10000; i < 40000; i++){ Node*newnode = getnew(); newnode->key = i; int hashkey = getkey(i); insertnode(hashkey,newnode); Node *node = searchnode(newnode); printf("%x %d ",node,node->key); } return 0; }