zoukankan      html  css  js  c++  java
  • 哈希查找

    除留余数法与开放定址法构建哈希表:
     
    定义哈希表类型:
    typedef datatype{
       int key;
       int hi;   //表示本该存储的位置到最后存储的位置的冲突次数
    }
    typedef HashTable{
       datatype *base; //指向表的指针
       int length; //表长
       int num;   //表内元素个数
    }hashtable;   //哈希表
     
    void createhashtable(hashtable H,int m,hash[]){   //m为表长,hash数组存储要存进哈希表的元素
     
        H->base=(datatype *)malloc(m*sizeof(datatype));  //构建哈希表
        if(!H->base)return -1;
        H->length=m;
     
        for(i=0;i
            H->base[i]->key=0;
            H->base[i]->hi=-1;  //表中单元空的标志
        }
     
        for(i=0;i
            adrr=hash[i]%p;   //哈希函数,除留余数法,p自选
            sum=0;           //记录冲突次数
            if(H->base[adrr]->hi==-1){
                H->base[adrr]->key==hash[i];
                H->base[adrr]->hi=0;
            }
            else{
                do{
                  adrr=(adrr+k)%m;  //线性探测再散列
                  sum+1;
                }while(H->base[adrr]->hi!=-1);
                H->base[adrr]->key=hash[i];
                H->base[adrr]->hi=sum;
            }
        }
        H->num=m;
    }
     
     
    在哈希表查中找元素:
     
    void searchhash(hashtable H,int x){
        adrr=x%p;       //哈希函数
        id=adrr;
        while(H->base[adrr]->hi!=-1){  //在哈希表中查找,遇到空单元就退出。因为若遇到空单元还没找到,则该元素一定不存在
            if(H->base[adrr]->key==x)
                return adrr;
            else{
                adrr=(adrr+k)%H->length;  //线性探测
            }
            if(adrr==id) //整个哈希表没有空单元,遍历一遍还没找到则退出
                break;
        }
        return -1;
    }
  • 相关阅读:
    使用POI读取excel文件内容
    有序链表
    jQuery Validate验证框架详解
    怎样在VS2010中打开VS2012的项目
    在Win8.1系统下如何安装运行SQL Server 2005
    SQL2005 2008配置错误,无法识别的配置节 system.serviceModel machine.config配置文件有问题
    深入浅出学Spring Data JPA
    Java 学习摘要
    JFinal
    spring 4 + jpa(hibernate 3/4) + spring mvc 多数据源配置
  • 原文地址:https://www.cnblogs.com/yujon/p/5467589.html
Copyright © 2011-2022 走看看