代码练习----HashMap

固软一部通过工号查名字,哈希法实现。假设不考虑哈希值重复的情况。
在已有代码HashFindName.c基础上,只修改GetHaskKey函数即可。

#include <stdio.h>
#include <string.h>
#include <assert.h>
#define HASH_SIZE 1024
char names[100][16] = {{""}};
int hashIndex[HASH_SIZE] = {0};
int GetHashKey(char *num)
{
    int key = 0;
    int i;
    
    for(i=strlen(num)-1;i>=0;i--)
    {
        key = key | (1<<((num[i] - '0'))*i);
    }

    return key%HASH_SIZE;  
}
int nameIndex = 0;
void Add(char *num, char *name)
{
    hashIndex[GetHashKey(num)] = nameIndex;
    strcpy(names[nameIndex],name);
    nameIndex++;
}
void HashInit()
{
    nameIndex = 0;
    memset(hashIndex,0,sizeof(hashIndex));
    memset(names,0,sizeof(names));
    Add("10020211","YuJinHui");
    Add("10004024","GuanKongHui");
    Add("10109621","ZhouQimin");
}
char * GetNameByNum(char *num)
{
    return names[hashIndex[GetHashKey(num)]];
}

void main(void)
{
    HashInit();
    assert(strcmp(GetNameByNum("10020211"),"YuJinHui") == 0);
    assert(strcmp(GetNameByNum("10004024"),"GuanKongHui") == 0);
    assert(strcmp(GetNameByNum("10109621"),"ZhouQimin") == 0);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值