在图书馆本来想借那本《算法导论》的,谁知我查了半天,书这个校区没有,失望至极,发现本程序设计实践,听不错的。就先弄懂它吧!
这本书上面都是zoj,poj的题.
之前一直不会用链表,这次补上了!
题目:给出L个数从中找出出现次数最多的,将其输出.
关键点:对时间没限制,但对内存有限制
所以用链表比较快
代码:
#include<stdio.h>
#include<stdlib.h>
struct Node{
int a,n;
Node *next;
};
int main()
{
Node *A,*p,*q,*r;
int L,a,max,temp;
while(scanf("%d",&L)!=EOF)
{
scanf("%d",&a);
A=(Node*)malloc(sizeof(Node));//为A分配内存
A->a=a;A->n=1;A->next=NULL;
p=A;
L--;
while(L>0)
{
scanf("%d",&a);
p=A;
while(p!=NULL)
{
if(p->a==a)
{p->n++;break;}
q=p;p=p->next;
}//查找相等的并计数
if(p==NULL)
{
r=(Node*)malloc(sizeof(Node));
r->a=a;r->n=1;r->next=NULL;
q->next=r;
}//若没有出现将其插入到q的后面
L--;
}
p=A;max=0;
while(p!=NULL)
{
if((p->n)>max)
{
max=p->n;
temp=p->a;
}
p=p->next;
}
printf("%d\n",temp);//查找最高频元素并输出
p=A;
while(p!=NULL)
{
q=p;p=p->next;
free(q);
}//释放内存
}
return 0;
}