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; }
使用说明
- text.txt示例内容:
5 0 2 3 1 1 7 2 3
- 运行效果:程序会逐行读取文件内容,将每行的三个值存入链表节点,然后遍历打印每个节点的数据,并演示
burst_time + priority的运算。
内容的提问来源于stack exchange,提问作者jonathan pascal
相关产品推荐
相关产品推荐

