在C语言中,如何统计一维数组中重复频率最多次的元素,(数组中可能存在多组相同元素),并将其输出。

不知我的问题讲的清楚不,希望给个答案。谢谢
另外数组已经排序了,按照从小到大的顺序排列了。也就是说相同的数据可能是相邻的。只希望统计重复频率最多次的那个元素,并将其输出。(但数组中可能会有多组重复的元素,它们重复频率相同也可能不相同。) 数组 unsigned short array[n]

#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就直接输出本元素。给链表排序我不会呀,我很菜,求大哥写一下这个要求,谢谢,真诚的对大哥说声谢谢 !您辛苦了!

追答

最近有点忙,有时间再帮你看看吧~

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答