数据结构实验:哈希表

来源:互联网 发布:淘宝宝贝倒计时生成器 编辑:程序博客网 时间:2024/06/15 02:15

数据结构实验:哈希表

Time Limit: 1000MS Memory limit: 65536K

题目描述

 在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。

输入

 单组数据,第一行数字n(1<=n<=100000)。
接下来有n个数字,每个数字不超过100000000

输出

 出现次数最多的数字和次数。

示例输入

31 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;}


 
0 0
原创粉丝点击