zoukankan      html  css  js  c++  java
  • Hash表API

    #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;
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    session的使用
    不可变对象的魅力
    协变和逆变
    LaTeX 学习小结
    KMP 算法的两种实现
    MySQL MVCC
    Java 并发之 Executor 框架
    Java 动态代理的简单使用和理解
    Java 偏向锁、轻量级锁和重量级锁
    事件循环和协程
  • 原文地址:https://www.cnblogs.com/linux0537/p/7598907.html
Copyright © 2011-2022 走看看