#include <stdio.h>
#include <stdlib.h>
struct VALUE_INFO
{
int nValue;
int nCount;
struct VALUE_INFO *pNextInfo;
};
void main()
{
unsigned short arr[] = {1, 2, 2, 4, 5, 6, 6, 6, 6, 7, 8, 8, 9};
int MAX_SIZE = sizeof(arr) / sizeof(short);
struct VALUE_INFO *pHeadInfo = NULL, *pEndInfo = NULL, *pTempInfo;
int i;
int nMaxCount = -1;
short sLastValue;
for (i = 0; i < MAX_SIZE; i++)
{
if (pHeadInfo == NULL)
{
pHeadInfo = (struct VALUE_INFO*)malloc(sizeof(struct VALUE_INFO));
pHeadInfo->nValue = arr[i];
pHeadInfo->nCount = 1;
pHeadInfo->pNextInfo = NULL;
pEndInfo = pHeadInfo;
sLastValue = arr[i];
continue;
}
if (sLastValue != arr[i])
{
pTempInfo = (struct VALUE_INFO*)malloc(sizeof(struct VALUE_INFO));
pTempInfo->nValue = arr[i];
pTempInfo->nCount = 1;
pTempInfo->pNextInfo = NULL;
pEndInfo->pNextInfo = pTempInfo;
pEndInfo = pTempInfo;
sLastValue = arr[i];
}
else
{
pTempInfo->nCount++;
}
}
while (pHeadInfo)
{
if (pHeadInfo->nCount > nMaxCount)
{
pTempInfo = pHeadInfo;
nMaxCount = pHeadInfo->nCount;
}
pHeadInfo = pHeadInfo->pNextInfo;
}
printf("Max count = %d, value = %d\n", pTempInfo->nCount, pTempInfo->nValue);
system("PAUSE");
}
追问nMaxCount 为什么要初始化成 -1 ,
这段我仿真的结果就没有输出重复频率最大次的元素
while (pHeadInfo)
{
if (pHeadInfo->nCount > nMaxCount)
{
pTempInfo = pHeadInfo;
nMaxCount = pHeadInfo->nCount;
}
pHeadInfo = pHeadInfo->pNextInfo;
}
printf("Max count = %d, value = %d\n", pTempInfo->nCount, pTempInfo->nValue);
假设我想让重复频率第2多的元素返回呢!该怎么写??
追答1、nMaxCount 初始化成-1是因为先定义一个最小的值,这样才能通过比较寻找最大的值,其实不初始化成-1也可以的。
2、如果想让重复频率第2多的元素返回,那么就先对链表由大到小进行排序,然后按照自己的需求输出就行了
追问首先假设数组有30个元素,经过统计后如果重复频率最多次的元素是0并且pTempInfo->nCount > 21,那么输出0。如果pTempInfo->nCount < 21,那么就输出重复频率第2多的元素。如果统计后发现重复最多次的那个元素不是0就直接输出本元素。给链表排序我不会呀,我很菜,求大哥写一下这个要求,谢谢,真诚的对大哥说声谢谢 !您辛苦了!
追答最近有点忙,有时间再帮你看看吧~