中易网

【C语言】求问这样的code怎么写

答案:2  悬赏:40  
解决时间 2021-02-23 08:50
【C语言】求问这样的code怎么写
最佳答案
#include 
#include 
#include 

// 保存实验数据的结构体 
struct Data {
    int event;
    int w;
    int t;
};
 
// 定义数据链表结构,将同一组数据放在一个链表中
struct DataLink {
    int index; // 保存在实验数据数组中的下标,而不是保存实际的数据值 
    struct DataLink *next;
};
 
// 定义数据组链表结构,连接所有的数据组
struct DataGroupLink {
    struct DataLink *dlhead; // 本组中的数据链表头 
    struct DataGroupLink *next;
};
 
main()
{
    struct DataGroupLink *dgl, *dglhead = NULL;
    struct DataLink *dl;
    struct Data td[1000]; // 保存实验数据,简单起见定义了一个数组,也可以根据实际的数据条数动态分配空间 
    FILE *fp;
    int i, count;
    fp = fopen("data.txt", "rt"); // 实验数据保存在名为data.txt的文件中,可根据实际情况修改 
    if(fp == NULL) {
        printf("数据文件不存在
");
        exit(-2);
    }
    // 将数据从文件读取到td数组中,未避免内存溢出,限定了不超过1000条 
    for(i = 0; i < 1000 && fscanf(fp, "%d %d %d", &td[i].event, &td[i].w, &td[i].t) == 3; i++);
    count = i;
    fclose(fp);
    if(count < 1) //没有记录 
        exit(0);
    printf("共有%d条记录
", count);

    // 将第一条数据记录加到链表中 
    dglhead= (struct DataGroupLink *)malloc(sizeof(struct DataGroupLink));
    dglhead->dlhead = (struct DataLink *)malloc(sizeof(struct DataLink));
    dglhead->next = NULL;
    dglhead->dlhead->index = 0;
    dglhead->dlhead->next = NULL;

    // 依次将其余数据按分组规则加入不同的数据组中 
    for(i = 1; i < count; i ++) {
        dgl = dglhead; //每一条数据都从头判断是否属于某个组 
        while(dgl) {
            dl = dgl->dlhead; // 循环判断一条数据与已存在的某组数据链中数据是否同组 
            while(dl) {
                if(abs(td[dl->index].t-td[i].t) >= 15 || abs(td[dl->index].w-td[i].w) >= 1)
                    break; // 不同组,结束本组判断,取下一组 
                if(dl->next == NULL) { // 所有的数据都符合同组条件,将其加入到本组链表的末尾 
                    dl->next = (struct DataLink *)malloc(sizeof(struct DataLink));
                    dl->next->index = i;
                    dl->next->next = NULL;
                    dl = NULL; // 设定结束条件,不必再对其它组数据进行判断 
                    break;
                }
                dl = dl->next;
            }
            if(dl == NULL) break;// 结束,本条数据已加入,取td中的下一条实验数据 
            if(dgl->next == NULL) { // 所有组数据都与本条数据不同组,增加一个新组放到组链表的末尾,并将该数据作为该组数据的链表头 
                dgl->next = (struct DataGroupLink *)malloc(sizeof(struct DataGroupLink));
                dgl->next->dlhead = (struct DataLink*)malloc(sizeof(struct DataLink));
                dgl->next->next = NULL;
                dgl->next->dlhead->index = i;
                dgl->next->dlhead->next = NULL;
                dgl = NULL;
                break; // 结束,本条数据已加入,取td中的下一条实验数据 
            }
            dgl = dgl->next;
        }
    }

    // 按组输出结果 
    dgl = dglhead;
    i = 1;
    while(dgl) {
        printf("第%d组数据:", i++);
        dl = dgl->dlhead;
        while(dl) {
            printf("%d/%d/%d ", td[dl->index].event, td[dl->index].t, td[dl->index].w);
            dl = dl->next;
        }
        dgl = dgl->next;
        printf("
");
    }
    
    // 释放分配的内存空间
    while(dglhead) {
        dgl = dglhead->next;
        while(dgl->dlhead) {
            dl = dgl->dlhead->next;
            free(dgl->dlhead);
            dgl->dlhead = dl;
        }
        dgl = dgl->next;
        free(dglhead);
        dglhead = dgl;
    }
}
全部回答
C语言的话用二维数组,面相对象语言的话用list,看你要使用什么语言了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这个女生的头发是什么颜色的,,左边的那个
周村明星书店在什么地方啊,我要过去处理事情
大家好,我结婚两次,都离婚了,这次在家里相
瀚海洗浴地址在哪,我要去那里办事
荣威售后送行车记录仪是不是骗人的
南皮县润仓农资配送中心乌马营店地址在什么地
人力资源管理分几大板快?都是什么?
我弟弟到底是怎么了?弟弟26了,自从他4年前
仙境传说ro手游巫师装备怎么选择
向日葵的习性是什么?
已知数列{an}中,a1=3,1/(an+1)-1/an=5,n属于N
肾病综合症能吃绿豆吗
中国小孩可以吃外国奶粉吗
ASPI Manager for USB mass-storage Version
食盐为什么使人感到咸
推荐资讯
伊通满族自治县农药监督管理站地址在什么地方
24岁女生应该用什么样的眼霜
分手就分手吧,我也放的下。这句歌词出自那首
鹰蛋岩这个地址在什么地方,我要处理点事
论语里有一段,有弟子问,做学问累了可以放松
maya怎么才能让一个物体点的运动全在另一个物
宝莲灯鱼喜欢老水还是新水?
范村地址有知道的么?有点事想过去
我有B2E驾驶证 酒驾电动车 会吊销B2证吗
优美整形这个地址在什么地方,我要处理点事
每天跑步强度多少较合适?
常熟市古里镇友谊木器厂地址有知道的么?有点
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?