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

#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. PostgreSQL类型转换

    1.int装string select CAST (1234 AS text) select to_char(1234,’999‘) 2.string转int select cast('999' as ...

  2. cnodejs社区论坛6--评论功能

  3. css权重

    1.行内样式,指的是html文档中定义的style <h1 style="color: #fff;">header</h1> 2.ID选择器 3.类,属性选 ...

  4. Zend Studio 中导出 PHP 语法颜色配置

    Zend Studio 中,虽然可以自行配置 PHP 语法颜色,但是,没有导出配置的按钮.介个,总不能每次都配置一次吧,那不是累死伦家啦?有图有真相: 强迫症患者总是无法停止折腾,虽然内心总有个声音不 ...

  5. 百度地图API使用方法详解

    最近做了个项目,其中项目中有个需求需要用到百度地图进行导航,通过查阅相关资料参考百度地图api完成了一个例子. API地址:http://developer.baidu.com/map/jsdemo. ...

  6. go语言条件语句 if else

    示例: if a < 5 { return 0 } else { return 1 } 关于条件语句,需要注意以下几点:  条件语句不需要使用括号将条件包含起来():  无论语句体内有几条语 ...

  7. MySql基本概念(一)

    MySQL基本概念 一. 数据库系统概述: mysql是数据库系统的一种,下面是所有数据库系统中主要的组件. 数据库系统由硬件部分和软件部分构成,硬件主要用于存储数据库中的数据,包括计算机.存储设备. ...

  8. css命名书写规范小结。

    单行形式书写风格的排版约束 1.   每一条规则的大括号 { 前后加空格 2.   多个selector共用一个样式集,则多个selector必须写成多行形式 3.   每一条规则结束的大括号 } 前 ...

  9. 在线代码编辑器CodeMirror简介

    1.什么是Code Mirror 最近做一个项目需要在网页上实现一个代码编辑器,支持语法高亮.自动缩进.智能提示等功能.发现Code Mirror刚好满足所有需求.Code Mirror是由js写的一 ...

  10. Box2D自定义重力

    需要给刚体添加一个自定义的属性:m_customGravity,这样就可以动态的修改每一个刚体自定义的重力,查找box2d源码大约在5486行,加上红色的一句代码 b2Island.prototype ...