题意
Description
实现线性探测法的查找函数。
用 Key% TableSize 定义散列函数。
Input
输入第一行首先给出一个正整数n(≤1000),表示散列表的长度($TableSize$)。
第二行$n$个整数,表示当前散列表的内容,-1表示该位置为空。
第三行一个整数Key,表示要查找的值。
Output
输出包括一行。如果找到Key,输出这个单元下标;如果没找到Key但遇到一个空单元,输出这个空单元下标;如果没找到Key且散列表满了,则输出ERROR。
思路
大体就是模拟一下这个过程。
从前到后遍历一遍,如果该值出现过了,输出出现的位置的下标;
否则,看是否有值为-1的下标,如果没有的话输出ERROR;否则,输出值为-1的下标。
代码
#include <bits/stdc++.h> using namespace std; const int maxn=1e6+100; #define debug(x) cout<<#x<<":"<<x<<endl; int n,x,a[maxn]; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; cin>>x; int pos=-1; for(int i=1;i<=n;i++){ if(a[i]==x){ cout<<i-1<<endl; return 0; } if(a[i]==-1&&pos==-1) pos=i-1; } if(pos==-1) puts("ERROR"); else cout<<pos<<endl; return 0; } /** **/