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

不知我的问题讲的清楚不,希望给个答案。谢谢另外数组已经排序了,按照从小到大的顺序排列了。也就是说相同的数据可能是相邻的。只希望统计重复频率最多次的那个元素,并将其输出。(... 不知我的问题讲的清楚不,希望给个答案。谢谢
另外数组已经排序了,按照从小到大的顺序排列了。也就是说相同的数据可能是相邻的。只希望统计重复频率最多次的那个元素,并将其输出。(但数组中可能会有多组重复的元素,它们重复频率相同也可能不相同。) 数组 unsigned short array[n]
展开
 我来答
hgreminem
2012-05-14 · TA获得超过724个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:378万
展开全部
#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多的元素返回,那么就先对链表由大到小进行排序,然后按照自己的需求输出就行了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式