当前位置: 代码迷 >> 综合 >> 模拟哈希(开放地址法)
  详细解决方案

模拟哈希(开放地址法)

热度:77   发布时间:2023-10-13 10:56:00.0

本题要求你模拟hash的保留余数法:取关键字被某个不大于哈希表表长m的数key除后所得余数为哈希地址。即 H(key) = key MOD m

现在有两种操作:

     1. 往hash表插入一个值为x正整数。 

     2.查询hash表的每个地址表示的值。

如果地址发生冲突,使用开放定址法: Hi = (H(key) + di) MOD m. 其中di = 1, 2, 3, …, m-1.

Input

 第一行输入两个个整数q1<=q<=100)和m(1<=m<=100)m表示hash表的表长,接下来输入q行。每行首先输入一个正整数c1<=c<=200),c1的时候表示操作1,然后再输入一个值为x的正整数,c2的时候表示操作2

 

Output

对于每一个操作2,输出当前hash表的每个地址的值(空的地址用0表示)。

Sample Input

3 10
1 5
1 15
2

Sample Output

0 0 0 0 0 5 15 0 0 0

#include<stdio.h>
int a[200];
int N,m;
int di=1;
int hashset(int key)
{
   return (key%m);
}void hashput()
{
   for(int i=0;i<m-1;i++)printf("%d ",a[i]);printf("%d\n",a[m-1]);
}int main(void)
{
   scanf("%d%d",&N,&m);while(N--){
   int c,b;scanf("%d",&c);if(c==1){
   scanf("%d",&b);int p = hashset(b);while(a[p]!=0 && di<=m-1){
   p=(p+di)%m;}a[p]=b;}if(c==2){
   hashput();}}
}

  相关解决方案