⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 众数提取.cpp

📁 五种排序算法
💻 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 + -