📄 众数提取.cpp
字号:
//此代码还可用于,稀疏数组压缩
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
struct Item
{
int m; //存储某不重复的元素
int i;//存储该元素出现的次数
Item *next;
};
int main()
{
Item *phead,*prear,*pnew,*pfly,*pmax;
int *a,max=0,n,i;
do
{
cin>>n;
a=new int[n];
for (i=0;i<n;i++)
cin>>a[i];
pnew=new Item;
phead=pnew;
prear=pnew;
pnew->next=NULL;
prear->m=a[0];
prear->i=0;//将第一个元素放入链表,将个数设为0,原因后面说
for (i=0;i<n;i++)
{
pfly=phead;
do
{
if (a[i]==pfly->m) //将数组中的每一个元素,与表中的元素比较,如果
{
//是表中的某个值,将出现的次数加1,将第一个元素
pfly->i++; //设为0,是因为,第一次循环必然是使首选进对的
if (pfly->i>=max) //第一个元素的个数加1,
{
//找出最大值
max=pfly->i;
pmax=pfly;
}
break; //如果找到,则跳出循环,不跳出也可以(跳出减少执行次数)
}
else pfly=pfly->next; //在前一个结点没找到,就去下一个结点
}
while (pfly!=NULL);
if (pfly==NULL) //如果没在链中找到,将该元素,放入链表
{
pnew= new Item;
prear->next=pnew;
prear=pnew;
pnew->next=NULL;
prear->m=a[i];
prear->i=1; //此处赋值为一,是因为到下循环的下一次是,该元素不会再与链表中的数比较
}
}
cout<<pmax->m<<endl<<pmax->i<<endl;
delete [] a;
pfly=prear=phead;
while (pfly!=NULL)
{
delete pfly;
pfly=prear->next;
prear=prear->next;
}
}
while (n!=0);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -