散列表的简单实现

1 篇文章 0 订阅
1 篇文章 0 订阅


#include <iostream>
#include <string.h>
#include <cstdlib>
using namespace std;
#define MAX 100
typedef struct hashnode{
    char *name;
    char *addr;
    struct hashnode *next;
}node;
static node* hashtable[MAX];
unsigned _hash(char *name)
{
    unsigned hashval;
    for(hashval=0;*name!='\0';name++)
        hashval=7*hashval+*name;
    return hashval%MAX;
}
node * searchhash(char *name)
{
    node *p;
    for(p=hashtable[_hash(name)];p!=NULL;p=p->next)
    {
        if(strcmp(name,p->name)==0)
            return p;
    }
    return NULL;
}
node * inserthash(char *name,char *addr)
{
    node *p=searchhash(name);
    unsigned hashval;
    if(p==NULL)
    {
        p=(node*)malloc(sizeof(*p));
        p->name=strdup(name);
        hashval=_hash(name);
        p->next=hashtable[hashval];
        hashtable[hashval]=p;
    }
    else
        free(p->addr);
    p->addr=strdup(addr);
    return p;
}
char * getaddr(char *name)
{
    node* p=searchhash(name);
    if(p==NULL)return NULL;
    return p->addr;
}
int main()
{
    char *addr;
    inserthash("xiaobei","beijing");
    addr=getaddr("xiaobei");
    cout<<addr<<endl;
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值