首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

求大神帮忙,该怎么处理

2012-11-04 
求大神帮忙哈希表查找班级学生使平均查找长度不超过2。应该怎么设计?[解决办法]按什么查找啊,如果是按学号

求大神帮忙
哈希表查找班级学生使平均查找长度不超过2。应该怎么设计?

[解决办法]
按什么查找啊,如果是按学号找的话,查找长度1就行了啊
[解决办法]
查找的根据是什么?
[解决办法]
参考下

C/C++ code
#include<stdio.h>#include<string.h>#define N 50#define P1 47#define LEN 20 char tbl[N][LEN];int H1(char *key){    long k,d=0;    int c;    while(*key)      d=d+*key++;    k=d;    k=((k*k)%10000-(k*k)%100)/100;    return k%P1;}/*int H1(char *key){    int temp[10];    long k,d=0,e;    int c,f,g;    while(*key)      d=d+*key++;    d=d*d;    e=d;    for(c=0;e!=0;c++)    {        e=e/10;    }    g=c;    for(f=c;f>=0;f--)    {        temp[--g]=d%10;        d/=10;    }    k=temp[c/2]*10+temp[c/2+1];    return k%P1;}*/int Search(char *key_word ){       int pos,c=5;    pos=H1(key_word);    if (strcmp(tbl[pos],key_word)==0)        return  pos;    while(tbl[pos][0]!='\0'&& strcmp(tbl[pos],key_word) )         pos=(pos+c)%N;         if(tbl[pos][0]=='\0')        return  -1;    else  return  pos;}char *k_word[]={"Wangdepeng","caozuan","zhangji","baiyi","wangwang","xiaohun","xiaojun","wangan","lida","nijiang",                "Wanghao","wangxiaoha","lijian","neicun","chenghao","lixiaoyang","lihui","lidada","wangxiaoxiao","caomimi",                "Nidada","woshishui","pengpeng","xiaoyiyi","depeng","fadiande","zhuguanjun","baoshanwei","baowei","kouwei"};void main(){    int count[N],i,pos,c,n;    char k_name[LEN];    char m;    for(i=0;i<N;i++)    {        count[i]=0;        tbl[i][0]='\0';    }    n=sizeof(k_word)/sizeof(k_word[i]);    for(i=0;i<n;i++)    {        pos=H1(k_word[i]);        c=5;        while(tbl[pos][0]!='\0'&&strcmp(tbl[pos],k_word[i]))        {            count[pos]++;            pos=(pos+c)%N;        }        strcpy(tbl[pos],k_word[i]);    }    for(i=c=0;i<N;i++)       if(tbl[i][0]!='\0')           printf("%10s%c",tbl[i],++c%5==0? '\n':'\t');        printf("\n\n");    for(i=c=0;i<N;i++)        if(tbl[i][0]!='\0')        printf("%4d%c",count[i],++c%5==0? '\n':'\t');        printf("\n\n");    for(i=c=0;i<N;i++)    if(tbl[i][0]!='\0')     c+=count[i]+1;    printf("ASL=%.2f\n\n",(float)c/n);      printf("Please input a keyword:");      for(;;)    {    gets(k_name);    pos=Search(k_name);    if(pos!=-1)  printf(" found at %d\n",pos);    else   printf("not found ! \n");    }    m=getchar();        } 

热点排行