博客
关于我
7-7 整型关键字的散列映射 (25分)
阅读量:357 次
发布时间:2019-03-04

本文共 1433 字,大约阅读时间需要 4 分钟。

为了解决这个问题,我们需要使用哈希表来存储一系列整型关键字,并用线性探测法解决哈希冲突。以下是详细的解决方案:

方法思路

  • 哈希函数:使用除留余数法将关键字映射到哈希表中的位置。具体来说,哈希函数 h = k % P 将关键字 k 映射到位置 h
  • 线性探测法:解决哈希冲突。当一个位置被占据时,线性探测法会沿着散列表线性递增的位置寻找下一个空位。
  • 初始化:创建两个数组 flagindex,分别用于记录每个位置是否被占用以及每个关键字的位置。
  • 处理输入:读取输入数据,包含关键字数量 N 和哈希表的长度 P,以及 N 个关键字。
  • 存储关键字:逐个处理每个关键字,计算其哈希值并记录到哈希表中,使用线性探测法解决冲突。
  • 解决代码

    #include 
    #include
    int main() { int n, p; scanf("%d %d", &n, &p); int keys[n]; for (int i = 0; i < n; ++i) { keys[i] = 0; scanf("%d", keys + i); } int flag[p] = {0}; int index[n] = {0}; for (int i = 0; i < n; ++i) { int k = keys[i]; int h = k % p; if (flag[h] == 0) { index[i] = h; flag[h] = 1; } else { int j = h + 1; while (true) { if (j >= p) { j = 0; } if (flag[j] == 0) { index[i] = j; flag[j] = 1; break; } j++; } } } for (int i = 0; i < n; ++i) { if (i != 0) { printf(" "); } printf("%d", index[i]); } printf("\n"); return 0;}

    代码解释

  • 读取输入:首先读取 NP,然后读取 N 个关键字。
  • 初始化数组flag 数组用于记录每个位置是否被占用,index 数组记录每个关键字的位置。
  • 处理每个关键字:计算每个关键字的哈希值,并检查该位置是否可用。如果可用,记录该位置并标记;如果不可用,使用线性探测法找到下一个空位。
  • 输出结果:按顺序输出每个关键字的位置。
  • 这种方法确保了每个关键字都能正确地存储到哈希表中,并且在发生冲突时能够高效地找到下一个空位。

    转载地址:http://floe.baihongyu.com/

    你可能感兴趣的文章
    PB级分析型数据库ClickHouse的应用场景和特性
    查看>>
    pc3-12800
    查看>>
    PCA---主成成分分析
    查看>>
    PCA和自动编码器:每个人都能理解的算法
    查看>>
    pca算法
    查看>>
    PCA降维demo
    查看>>
    SharePoint 2013 图文开发系列之定义站点模板
    查看>>
    PCB生产流程详解-ChatGPT4o作答
    查看>>
    PCB设计十条黄金法则
    查看>>
    SpringSecurity框架介绍
    查看>>
    PCI Express学习篇:Power Management(二)
    查看>>
    pcie握手机制_【博文连载】PCIe扫盲——Ack/Nak 机制详解(一)
    查看>>
    pcm转wav的方法及代码示例
    查看>>
    PC史上最悲剧的16次失败
    查看>>
    PC端恶意代码分析Lab1.1-5.1,从零基础到精通,收藏这篇就够了!
    查看>>
    PC端稳定性测试探索
    查看>>
    PC端编辑 但能在PC端模拟移动端预览的富文本编辑器
    查看>>
    PDB文件:每个开发人员都必须知道的
    查看>>
    springMVC学习(二)
    查看>>
    Pdfkit页眉和页脚
    查看>>