这里使用了编号代替真实的数据,只用来表示算法

#ifndef HASH_DATA_T
#define HASH_DATA_T int
#endif      //HASH_DATA_T
typedef struct node_t{
    HASH_DATA_T* data;
    int num;
    struct node_t* next;
}node_t;
typedef struct{
    node_t** table;     //数组指针表示hash表
    int maxlen;
}hash_t;
//创建hash表
hash_t* create_hash(int len){
    hash_t* H=(hash_t*)malloc(sizeof(hash_t));
    H->table=(node_t**)malloc(len*sizeof(node_t*));
    H->maxlen=len;
    int i=0;
    for(i=0;i<len;i++){
        H->table[i]=(node_t*)malloc(sizeof(node_t));
        H->table[i]->next=NULL;
    }
    return H;
}
//插入数据(编号)
int insert_hash(hash_t* H,int num){ //用编号代替了数据,需要其他数据的时候扩展一下就好
    //对表单的个数取余,获得key
    int key=num%H->maxlen;
    node_t* pNode=H->table[key];
    //封装节点
    node_t* tmp=(node_t*)malloc(sizeof(node_t));
    tmp->num=num;
    for(pNode=H->table[key];pNode!=NULL;pNode=pNode->next){
        if(NULL==pNode->next||pNode->next->num>tmp->num){
            tmp->next=pNode->next;
            pNode->next=tmp;
            return 0;
        }
    }
    return -2;
}

//显示表
int show_hash(hash_t* H){
    int i=0;
    node_t* pNode=NULL;
    for(i=0;i<H->maxlen;i++){
        for(pNode=H->table[i]->next;pNode!=NULL;pNode=pNode->next){
            printf("%d ",pNode->num);
        }
        putchar(10);
        puts("+++++++++++");
    }
    return 0;
}
//查找数据
int search_hash(hash_t* H, int num){
    node_t* pNode=NULL;
    int i=0;
    for(i=0;i<H->maxlen;i++){
        for(pNode=H->table[i]->next;pNode!=NULL;pNode=pNode->next){
            if(pNode->num==num){
                printf("%d ",pNode->num);
            }
        }
        putchar(10);
        puts("+++++++++++");
    }
    return 0;
}
//销毁hash表
int destroy_hash(hash_t* hash){
    int i=0;
    for(i=0;i<hash->maxlen;i++){
        free(hash->table[i]);
        hash->table[i]=NULL;
    }
    free(hash->table);
    hash->table=NULL;
    free(hash);
    hash=NULL;
}

hash查找的更多相关文章

  1. 二分查找和hash查找

    转载:http://blog.csdn.net/feixiaoxing/article/details/6844723 无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不 ...

  2. Hash查找法在Keil C51中的实现

    摘要:散列(hash)是一种重要的存储方法,也是一种常见的查找方法.它是指在记录的存储位置和它的关键字之间建立一个确定的对应关系.本文以射频卡门禁控制器为例,说明用射频卡卡号作为关键字,用Hash查找 ...

  3. 9.算法之顺序、二分、hash查找

    一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 True 或 False.有时它可能返回元 ...

  4. 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)

    查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...

  5. 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格

    1.路由CACHE的优势与劣势 分级存储体系已经存在好多年了.其精髓在于"将最快的存储器最小化.将最慢的存储器最大化",这样的结果就使资源利用率的最大化.既提高了訪问效率,又节省了 ...

  6. 算法之顺序、二分、hash查找

    算法之顺序.二分.hash查找   一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 Tru ...

  7. POJ 1200 Crazy Search 字符串的Hash查找

    第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...

  8. 查找算法----二分查找与hash查找

    二分查找 有序列表对于我们的实现搜索是很有用的.在顺序查找中,当我们与第一个元素进行比较时,如果第一个元素不是我们要查找的,则最多还有 n-1 个元素需要进行比较. 二分查找则是从中间元素开始,而不是 ...

  9. 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找

    千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...

随机推荐

  1. UVALive 4987---Evacuation Plan(区间DP)

    题目链接 https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  2. JS疑难点和GC原理

    js解析与序列化json数据(一)json.stringify()的基本用法: 对象有两个方法:stringify()和parse().在最简单的情况下,这两个方法分别用于把JavaScript对象序 ...

  3. 项目总结笔记系列 wsTax KT Session1

     项目总结笔记 1.专有名词解释: SMO, Separate Management Office. UAT, User Accept Test. GSLB, Global Server Load B ...

  4. Scalaz(7)- typeclass:Applicative-idomatic function application

    Applicative,正如它的名称所示,就是FP模式的函数施用(function application).我们在前面的讨论中不断提到FP模式的操作一般都在管道里进行的,因为FP的变量表达形式是这样 ...

  5. 标签栏使用Demo二

    // //  PHTagViewFrame.m //  标签的使用二 // //  Created by 123 on 16/9/6. //  Copyright © 2016年 彭洪. All ri ...

  6. UVA 12169 Disgruntled Judge 枚举+扩展欧几里得

    题目大意:有3个整数 x[1], a, b 满足递推式x[i]=(a*x[i-1]+b)mod 10001.由这个递推式计算出了长度为2T的数列,现在要求输入x[1],x[3],......x[2T- ...

  7. 基于HTML5 geolocation 实现的天气预报功能

    最近一直在学习HTML5,因为8月份要开发手机项目了.所以先把HTML5学习下. 基本思路: 1. 用户未设置任何城市之前,根据HTML5 geolocation 获取用户所在的地理位置. 2. 根据 ...

  8. Razor语法大全

    本文页面来源地址:http://www.cnblogs.com/dengxinglin/p/3352078.html Razor是基于framewor4以上写的一个开源项目:https://githu ...

  9. ActiveMQ 简介与安装

    一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...

  10. SQL SERVER常用定义查询

    https://msdn.microsoft.com/en-us/library/ms175081.aspx