• 哈希查找


    除留余数法与开放定址法构建哈希表:
     
    定义哈希表类型:
    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;
    }
  • 相关阅读:
    IBM Personal Communications 软件:精简绿色版TN3270终端模拟器:经测试可以在 (winxp、win2003、win764)上运行
    virtualbox谨记:续....
    Eclipse连接MySQL数据库
    shell几种字符串加密解密的方法
    表达式语言引擎:Apache Commons JEXL 2.1 发布
    一种表达式语言的解析引擎JEXL简单使用
    Java 实现String语句的执行(Jexl)
    JUnit4
    EL表达式
    Looping through the content of a file in Bash
  • 原文地址:https://www.cnblogs.com/yujon/p/5467589.html
Copyright © 2020-2023  润新知