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;
    }
    大多数想法要么平庸,要么更糟糕,这很大程度上因为绝妙的想法难得一见,而且他们还要在我们身边这个充斥了各种恶俗的所谓常识的环境中孕育生长。
  • 相关阅读:
    Linux命令-查看进程
    Linux命令-查看内存
    Linux命令---vim
    oracle分页查询按日期排序失败问题
    oracle使用between and边界问题
    给大家介绍一个自我感觉好用的网站
    想学习一下微服务
    oracle获取年、月、日
    mybatis返回map结果集
    修改表中列
  • 原文地址:https://www.cnblogs.com/linux0537/p/7598907.html
Copyright © 2011-2022 走看看