【C语言】求问这样的code怎么写
答案:2 悬赏:40
解决时间 2021-02-23 08:50
- 提问者网友:人生佛魔见
- 2021-02-22 21:49
【C语言】求问这样的code怎么写
最佳答案
- 二级知识专家网友:忘川信使
- 2021-02-22 22:26
#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;
}
}
#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;
}
}
全部回答
- 1楼网友:忘川信使
- 2021-02-22 22:37
C语言的话用二维数组,面相对象语言的话用list,看你要使用什么语言了。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯