Chinaunix首页 | 论坛 | 博客
  • 博客访问: 38511
  • 博文数量: 64
  • 博客积分: 2640
  • 博客等级: 少校
  • 技术积分: 670
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 13:15
文章分类
文章存档

2010年(64)

我的朋友
最近访客

分类: C/C++

2010-01-26 14:05:35

2009-03-24 16:15

const int m = 701;//与2^n不太接近的素数

const int m2 = 2917;//与2^n不太接近的素数

int list[m];
int iter;
 
void init();

int h(int key);
int h2(int key);
int get_key(char c);
 
void init(){
     for(int i=0;i<m;i++)
         list[i] = -1;
}
int h(int key){
    return key%m;
}
   
int h2(int key){
    return key%m2;
}
   
int get_key(char c){
    return (int)c<<4;
}
 
双重探查:
void insert(char c);
int search(char c);
 
void insert(char c){
     int i,t,t2;
    
     t = h(get_key(c) );
     t2 = h2(get_key(c) );
     for(i=0;i<m;i++){
         if(list[t]==-1){
            list[t] = c;
            break;
         }
         t = (t+t2)%m;
        
     }
}
   
int search(char c){
    int r,i,t,t2;
    
    r = -1;
    t = h(get_key(c) );
    t2 = h(get_key(c) );
    for(i=0;i<m;i++){
        //test

        iter++;
        //test

        if(list[t]==c){
           r = t;
           break;
        }
        t=(t+t2)%m;
    }
    
    return r;
}
线性探查:
void insert(char c);
int search(char c);
 
void init(){
     for(int i=0;i<m;i++)
         list[i] = -1;
}
int h(int key){
    return key%m;
}
   
int get_key(char c){
    return (int)c<<4;
}
void insert(char c){
     int i,t;
    
     t = h(get_key(c) );
     for(i=0;i<m;i++){
         if(list[t]==-1){
            list[t] = c;
            break;
         }
         t = (t+1)%m;
        
     }
}
   
int search(char c){
    int r,i,t;
    
    r = -1;
    t = h(get_key(c) );
    for(i=0;i<m;i++){
        //test

        iter++;
        //test

        if(list[t]==c){
           r = t;
           break;
        }
        t=(t+1)%m;
    }
    
    return r;
}
二次探查:
void insert(char c);
int search(char c);
 
void init(){
     for(int i=0;i<m;i++)
         list[i] = -1;
}
int h(int key){
    return key%m;
}
   
int get_key(char c){
    return (int)c<<4;
}
void insert(char c){
     int i,t;
    
     t = h(get_key(c) );
     for(i=0;i<m;i++){
         if(list[t]==-1){
            list[t] = c;
            break;
         }
         t = (t+i)%m;
        
     }
}
   
int search(char c){
    int r,i,t;
    
    r = -1;
    t = h(get_key(c) );
    for(i=0;i<m;i++){
        //test

        iter++;
        //test

        if(list[t]==c){
           r = t;
           break;
        }
        t=(t+i)%m;
    }
    
    return r;
}


阅读(344) | 评论(0) | 转发(0) |
0

上一篇:基数排序

下一篇:功能比较完整的红黑树

给主人留下些什么吧!~~