70,020
社区成员




#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -1
typedef struct Data
{
char *color;
int time;
struct Data *next;
}Data,* PData;
typedef struct List
{
struct Data *head;
int len;
}List, *PList;
PList AddData(PList list, char *color);
void ClearData(PList list);
int CompareTo(char *src, char *dest);
void PrintData(PList list);
int main(int argc, char **argv)
{
PList list = (PList) malloc (sizeof(List));
list->len = 0;
list->head = NULL;
while(TRUE)
{
ClearData(list);
int count = -1;
if(scanf("%d",&count) == EOF)
{
exit(0);
}
if(count == 0 || count == -1)
{
exit(0);
}
int i;
for (i = 0; i < count; i++)
{
char *color;
if(scanf("%s",color) == EOF)
{
exit(0);
}
list = AddData(list,color);
}
PrintData(list);
printf("----------------\n");
PrintData(list);
}
}
PList AddData(PList list, char *color)
{
PData pd = NULL;
int flag = 0;
if(list->head)
{
pd = list->head;
}
while(pd)
{
if(CompareTo(pd->color,color) == 0)
{
pd->time ++;
flag = 1;
break;
}
pd = pd->next;
}
if(!flag)
{
PData p = (PData) malloc (sizeof(Data));
p -> color = (char *) malloc (sizeof(char));
p -> color = color;
p -> time = 1;
p->next = list->head;
list->head = p;
list->len++;
}
return list;
}
int CompareTo(char *src, char *dest)
{
int i = 0;
while(src[i] != '\0' && dest[i] != '\0' && src[i] == dest[i])
{
i++;
}
if(src[i] == dest[i])
{
return 0;
}
else
{
return src[i] > dest[i] ? 1 : -1;
}
}
void PrintData(PList list)
{
if(!list)
{
return;
}
if(!list->head)
{
return;
}
int max = 0;
char *color = (char *) malloc (sizeof(char));
PData data = (PData) malloc (sizeof(Data));
PData backup = list->head;
data = list->head;
while(data)
{
if(max < data->time)
{
max = data->time;
color = data->color;
}
data = data->next;
}
data = backup;
printf("%s\n",color);
}
void ClearData(PList list)
{
if(!list)
{
return;
}
list->head = NULL;
}
/*随便扫描一遍,发现这里有问题,color未分配内存*/
char* color;
if (scanf("%s", color) == EOF)
{
exit(0);
}
list = AddData(list, color);