哈希表
若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。
对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为冲突(英语:Collision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表或散列,所得的存储位置称散列地址。
若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。
好的,介绍的差不多了,上代码!
ACcode:
#include<bits/stdc++.h>
using namespace std;
struct node
{
string n;
int num;
};
node a[100005];
int main()
{
int b=0;
int n;
cin>>n;
for(int i=1; i<=n; i++)
{
string c;
cin>>c;
bool flag=0;
for(int j=0; j<=b; j++)
if(a[j].n==c)
{
a[j].num++;
cout<<a[j].n<<a[j].num<<endl;
flag=1;
break;
}
if(!flag)
{
cout<<"OK"<<endl;
a[b++].n=c;
}
}
return 0;
}
谢谢支持,如果这对您用帮助的话请点赞哦!
如果有疑问,可以私聊我,一定会帮您解答哦~~
我的博客1
我的博客2