Tio_LIU
2020-06-30 22:48
采纳率: 100%
浏览 112

请问C实现数据文件的逆序处理

1:准备用C对一个数据文件(500M左右大小)进行逆序处理,即按照行从尾向头进行存储。
例如:
转换前处理为转换后

2:目前我是采用双向链表的方式进行实现的,代码如下:

int MainNegativeSeqPatrolLoc(char FilePath[], char PosName[], char NegName[])
{
    struct st {
        char c[4096];
        struct st *up;
        struct st *down;
    }*head, *tp, *next;

    head = (struct st*)malloc(sizeof(struct st));
    char FilePos[300] = { " " };
    strcpy(FilePos, FilePath);
    strcat(FilePos, PosName);
    FILE *fPPOS = fopen(FilePos, "rb");

    char FileNeg[300] = { " " };
    strcpy(FileNeg, FilePath);
    strcat(FileNeg, NegName);
    FILE *fPNEG = fopen(FileNeg, "wb");
    tp = head;
    tp->up = head;

    while (!feof(fPPOS))
    {
        next = (struct st*)malloc(sizeof(struct st));
        fgets(next->c, 768, fPPOS);
        tp->down = next;
        next->up = tp;
        tp = next;
    }
    tp->down = NULL;
    while (tp->up != head)
    {
        fputs(tp->c, fPNEG);
        tp = tp->up;
    }
    fputs(tp->c, fPNEG);

    free(head);
    free(tp);

    fclose(fPPOS);
    fclose(fPNEG);
    return 1;
}

3:问题-想请教是否还有更加高效快速的方式?想让大神帮一帮忙。

最后,再次谢谢浏览和帮助的小伙伴~~~

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • blownewbee 2020-07-01 15:35
    已采纳

    500MB的文件,简单暴力直接在内存里面读取,装入双向链表,再从后往前写入文件。
    文本文件不能随机定位,所以一次性从头往后读取,再写入,虽然费内存但是肯定高效。而且现在的计算机都有16GB甚至更多的内存,区区500MB,也就是0.5GB非常微不足道。

    点赞 打赏 评论

相关推荐 更多相似问题