数据结构实验:哈希表
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
在n个数中,找出出现次数最多那个数字,并且输出出现的次数。如果有多个结果,输出数字最小的那一个。
输入
单组数据,第一行数字n(1<=n<=100000)。 接下来有n个数字,每个数字不超过100000000
输出
出现次数最多的数字和次数。
示例输入
31 1 2
示例输出
1 2
#include <stdio.h>
#include <string.h> #include <stdlib.h> struct node { int data; int num; struct node *next; }*head[100010];//定义一个包含数值,个数和指向下一节点的指针 int main() { int i,j,n,m,y,mdata,mnum=0; struct node *p,*q,*r; for(i=0; i<100000; i++) { head[i]=(struct node *)malloc(sizeof(struct node)); head[i]->next=NULL; } scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d",&m); y=m%100000; q=head[y]; p=head[y]->next; while(p!=NULL) { if(p->data==m) { p->num++; if(p->num>mnum) { mnum=p->num; mdata=p->data; } else if(p->num==mnum) { if(p->data<mdata) mdata=p->data; } break; } q=p; p=p->next; } if(p==NULL) { r=(struct node *)malloc(sizeof(struct node)); r->data=m; r->num=1; q->next=r; r->next=NULL; if(r->num>mnum) { mnum=r->num; mdata=r->data; } else if(r->num==mnum) { if(r->data<mdata) mdata=r->data; } } } printf("%d %d\n",mdata,mnum);return 0;
}