本题要求你模拟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
第一行输入两个个整数q(1<=q<=100)和m(1<=m<=100),m表示hash表的表长,接下来输入q行。每行首先输入一个正整数c(1<=c<=200),c为1的时候表示操作1,然后再输入一个值为x的正整数,c为2的时候表示操作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(); } } }