注册 登录
编程论坛 C++教室

CurrentPos=(CurrentPos<<6)+*key;什么意思????

lt2201004068 发布于 2012-04-24 19:13, 667 次点击
long int Find(PtrToHash *hash,char *c) //查找在散列表中的位置
{
    char *key;
    long int CurrentPos,CollisionNum;
    key=c;
    for(CurrentPos=0;*key;++key)               //散列函数,计算散列值
        CurrentPos=(CurrentPos<<6)+*key;
    CurrentPos%=TabSize;                     //散列值
    CollisionNum=0;//如果当前单元被占用:单元内的元素与当前操作的名字不同,使用平方探测法解决冲突;与当前操作的名字相同,则直接返回在散列中的位置
    while((hash[CurrentPos].info)&&(strcmp(hash[CurrentPos].name,c)))
    {        //平方探测法
        CurrentPos+=2*(++CollisionNum)-1;
        if(CurrentPos>=TabSize)
            CurrentPos-=TabSize;
    }
    if((hash[CurrentPos].info)&&(strcmp(hash[CurrentPos].name,c)==0)) //元素已经在散列表里
        hashedx=1;
    else  //元素不在散列表里
        hashedx=0;
    return CurrentPos;//返回在散列表中的位置
}
2 回复
#2
野比2012-04-24 20:39
CurrentPos左移6位,key指针取值……
#3
lt22010040682012-04-24 21:21
回复 2楼 野比
地址左移6位???
1