数据结构实验:哈希表
Time Limit: 1000MS Memory limit: 65536K
题目描述
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
输入
单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000
接下来有n个数字,每个数字不超过100000000
输出
出现次数最多的数字和次数。
示例输入
3 1 1 2
示例输出
1 2
提示
哈希思想,以数组下标存储数据,数组内元素存储数据出现的次数
数据比较大,所以要求余,而又因为求余后可能会有相同的数,所以用链地址分别存储。
struct hi
{
int num;
int date;
struct hi *next;
};
#include <stdio.h>
#include <string.h>
int main()
{
int n,i,j,k,ma,x;
struct hi a[100000];
scanf("%d",&n);
memset(a,0,sizeof(a));
for(i = 0; i<n; i++)
{
k = 0;
scanf("%d",&x);
j = x % 100000;
hi *p = &a[j],*t;
t = p;
while(p != NULL)
{
if(p ->date == x)
{
k = 1;
p ->num++;
break;
}
p = p->next;
if(t ->next != NULL)
{
t = t ->next;
}
}
if(k == 0)
{
p = t;
p ->next = new hi;
p = p ->next;
p ->date = x;
p ->next = NULL;
p ->num = 1;
}
}
k = 0;
hi *p;
ma = 0;
for(i = 0;i<100000;i++)
{
p = &a[i];
while(p != NULL)
{
if(p ->num > ma)
{
ma = p ->num;
k = p ->date;
}
else if(p ->num == ma)
{
if(p ->date < k)
k = p ->date;
}
p = p ->next;
}
}
printf("%d %d\n",k,ma);
return 0;
}