You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言从文本文件读取三元组数据存入链表并实现操作

修正后的代码及说明

核心修改点

  • 重构链表节点结构,新增三个成员变量分别存储burst_time、arrival_time、priority,确保每行数据对应一个独立节点
  • 移除main函数中对NULL指针直接赋值的致命错误
  • 重写deserialize函数,改为按行读取三个整数的三元组,直到文件末尾
  • 适配insert_end函数,使其能接收并存储三个整数数据
  • 补充缺失的deallocate函数,实现链表内存的正确释放

完整代码

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

// 修改节点结构,存储一行的三个参数
typedef struct Node{
    int burst_time;
    int arrival_time;
    int priority;
    struct Node* next;
}Node;

// 适配新节点结构的尾部插入函数
void insert_end(Node** root, int burst, int arrival, int prio)
{
    Node* new_node = malloc(sizeof(Node));
    if(new_node == NULL)
    {
        perror("Failed to allocate memory");
        exit(EXIT_FAILURE);
    }
    new_node->burst_time = burst;
    new_node->arrival_time = arrival;
    new_node->priority = prio;
    new_node->next = NULL;

    if(*root == NULL)
    {
        *root = new_node;
        return;
    }

    Node* curr = *root;
    while(curr->next != NULL)
    {
        curr = curr->next;
    }
    curr->next = new_node;
}

// 按行读取三元组的文件解析函数
void deserialize(Node** root)
{
    FILE* file = fopen("text.txt","r");
    if(file == NULL)
    {
        perror("Failed to open file");
        exit(EXIT_FAILURE);
    }
    int burst, arrival, prio;
    // 每次读取三个整数,直到文件末尾
    while(fscanf(file, "%d %d %d", &burst, &arrival, &prio) == 3)
    {
        insert_end(root, burst, arrival, prio);
    }
    fclose(file);
}

// 内存释放函数,避免内存泄漏
void deallocate(Node** root)
{
    Node* curr = *root;
    while(curr != NULL)
    {
        Node* temp = curr;
        curr = curr->next;
        free(temp);
    }
    *root = NULL;
}

int main(int argc, char* argv[])
{
    Node* root = NULL;

    // 读取文件并构建链表
    deserialize(&root);

    // 遍历链表,打印每个节点的三个值(示例操作)
    for(Node* curr = root; curr != NULL; curr = curr->next)
    {
        printf("Burst Time: %d, Arrival Time: %d, Priority: %d\n",
               curr->burst_time, curr->arrival_time, curr->priority);
        // 示例运算:burst time + priority
        printf("Burst + Priority: %d\n\n", curr->burst_time + curr->priority);
    }

    // 释放链表内存
    deallocate(&root);
   
    return EXIT_SUCCESS;
}

使用说明

  1. text.txt示例内容:
5 0 2
3 1 1
7 2 3
  1. 运行效果:程序会逐行读取文件内容,将每行的三个值存入链表节点,然后遍历打印每个节点的数据,并演示burst_time + priority的运算。

内容的提问来源于stack exchange,提问作者jonathan pascal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:11:01