本文共 1472 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要使用哈希表来存储一系列整型关键字,并用线性探测法解决哈希冲突。以下是详细的解决方案:
h = k % P 将关键字 k 映射到位置 h。flag 和 index,分别用于记录每个位置是否被占用以及每个关键字的位置。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;}
N 和 P,然后读取 N 个关键字。flag 数组用于记录每个位置是否被占用,index 数组记录每个关键字的位置。这种方法确保了每个关键字都能正确地存储到哈希表中,并且在发生冲突时能够高效地找到下一个空位。
转载地址:http://floe.baihongyu.com/