c语言程序问题输入输出问题

如何快速地统计出整型数组中不同元素的个数。你可以发挥你的聪明才智,设计高效统计算法。
我的建议使用结构体实现,仅供参考:
struct tongji{
int data; // 存放数组元素
int k; // 记录不同元素位次(1-n) 初始化为0,表示无位次
int flag; //重复标记位,有重复标记1 ,无重复标记0,初始化为0;
};
int cot[N]={0}; //按输入顺序记录不同元素出现次数。
输入
输入有两行,第一行是一个正整数n,表示数组元素个数。第二是n个数组元素,数据之间空格区分
输出
不同每个元素重复次数,格式如输出样例所示
难度
中等
输入示例
10
1 2 3 4 5 2 6 8 6 2
输出示例
1:1
2:3
4:1
5:1
6:2
8:1


#include <stdio.h>
#include <stdlib.h>

#define N 100

struct tongji
{
    int data; // 存放数组元素
    int k;    // 记录不同元素位次(1-n) 初始化为0,表示无位次
    int flag; //重复标记位,有重复标记1 ,无重复标记0,初始化为0;
};
// int cot[N] = {0}; //按输入顺序记录不同元素出现次数。

int findnum(struct tongji *tj, int x, int n)
{
    for (int i = 0; i < n; i++)
    {
        if (x == tj[i].data)
        {
            return i;
        }
    }
    return -1;
}

int main()
{
    int n, t, i, x, cnt = 0;

    scanf("%d", &n);
    struct tongji *tj = (struct tongji *)calloc(n, sizeof(struct tongji));

    for (i = 0; i < n; i++)
    {
        scanf("%d", &x);
        t = findnum(tj, x, i);
        if (t == -1)
        {
            tj[cnt].data = x;
            tj[cnt].k++;
            tj[cnt].flag = 0;
            cnt++;
        }
        else
        {
            tj[t].k++;
            if (tj[t].k > 1)
                tj[t].flag = 1;
        }
    }
    for (i = 0; i < cnt; i++)
    {
        printf("%d:%d\n", tj[i].data, tj[i].k);
    }

    return 0;
}