zoukankan      html  css  js  c++  java
  • PTA 7-42 整型关键字的散列映射(手写哈希表的线性探测法)

    本题考点:

    • 整型哈希表的线性探测法

    给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。
    输入格式:
    输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。
    输出格式:
    在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。
    输入样例:
    4 5
    24 15 61 88
    输出样例:
    4 0 1 3

    这道题考察的是哈希表的线性探测法。

    哈希函数直接用求余即可,有冲突默认到下一位,保存之后同时记录下每个保存数字的位置,如果插入相同的数字时,直接返回该数字所在的位置。

    完整代码实现如下:

    #include <iostream>
    using namespace std;
    
    #define MAXN 2000
    
    int N, P; // 正整数个数,素数
    bool hashTable[MAXN] = {false};
    int isIn[MAXN]; // 如果这个关键字存在了,那么保存它的位置
    
    int main()
    {
        fill(isIn, isIn + MAXN, -1);
        fill(hashTable, hashTable + MAXN, false);
        scanf("%d%d", &N, &P);
        int num, pos;
        for (int i = 0; i < N; i++)
        {
            scanf("%d", &num);
            if (isIn[num] < 0)
            {   // 这个数字不存在
                pos = num % P; // 保存最后保存的位置
                while (hashTable[pos] == true)
                { // 如果已经被占满了
                    if (pos == P - 1)
                        pos = 0;
                    else
                        pos += 1;
                }
                if (i > 0)
                    printf(" %d", pos);
                else
                    printf("%d", pos);
                hashTable[pos] = true;
                isIn[num] = pos;
            }
            else
            {
                printf(" %d", isIn[num]);
            }
        }
    
        return 0;
    }
    
  • 相关阅读:
    Elasticsearch7.6 环境部署
    JavaScript的语法
    如何在页面中引入JS教程
    什么是.bat文件
    window对象的一些其他通用函数
    history对象
    location对象
    32位与64位系统基本数据类型的字节数
    cygwin中运行python不能进入交互模式
    在Cygwin上安装编辑器vim
  • 原文地址:https://www.cnblogs.com/veeupup/p/12678181.html
Copyright © 2011-2022 走看看