在图书馆本来想借那本《算法导论》的,谁知我查了半天,书这个校区没有,失望至极,发现本程序设计实践,听不错的。就先弄懂它吧!

这本书上面都是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;
}

posted on 2010-10-28 22:42  role  阅读(335)  评论(0编辑  收藏  举报