C语言 哈希表

本文介绍了哈希表的基本概念,包括哈希函数的设计,如整数的除留余数法和字符串的间隔法。接着详细讨论了处理哈希冲突的两种策略:拉链法和线性探测法,并分别提供了C语言的代码实现。通过学习,读者可以理解哈希表如何高效地存储和查找数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

哈希表简介

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。

哈希函数

得到一个数的hash值的函数,被称为哈希函数。
1. 整数

除留余数法, 对于大小为素数M的数组,对于任意正整数k,计算k除以M的余数。M一般取素数。

#define PRIME 11
int getIntHashCode(int a) {
    return a%PRIME;
}


  1. 字符串

保留除余法
int getHashCode(char *str, int length) {
    int hash = 0;
    for (int i = 0; i < length; i++) {
        hash = *(str + i) + hash * 31;
    }
    return hash;
}

间隔n个字符,得到哈希值

//间隔dk个字符
int getHashCode_2(char *str, int length, int dk) {
    int hash = 0;
    for (int i = 0; i < length; i=i+2) {
        hash = *(str + i) + hash * 31;
    }
    return hash;
}

如果给定的数组超过我们存储的大小,就会有相同的哈希值,所以我们需要避免哈希冲突

哈希冲突
拉链法

这里写图片描述
将同一个哈希值的跟在之前的节点之后。

代码实现

ADT:

#include &l
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值