read+write实现:链表放到文件+文件数据放到链表 的功能

思路 

一、 定义链表:

1 节点结构(数据int型)
2 链表操作(创建节点、插入节点、释放链表、打印链表)。

二、链表保存到文件 

1打开文件
2遍历链表、写文件:
        遍历链表,write()将节点数据写入文件。
3关闭文件

三、从文件加载数据到链表

1打开文件
2读文件、建链表:
        read ()从文件读取数据,
        创建节点(放数据)。接起来,建链表。
3关闭文件  

代码: 

// 定义节点结构
typedef struct Node {int data;struct Node* next;
} Node;// 创建节点
Node* createNode(int data) {Node* newNode = (Node*)malloc(sizeof(Node));if (newNode == NULL) {perror("malloc failed");exit(EXIT_FAILURE);}newNode->data = data;newNode->next = NULL;return newNode;
}// 尾插
void insertNode(Node** head, int data) {Node* newNode = createNode(data);if (*head == NULL) {*head = newNode;return;}Node* t= *head;while (t->next != NULL) {t= t->next;}t->next = newNode;
}
// 释放链表
void freeList(Node* head) {Node* t;while (head != NULL) {t= head;head = head->next;free(t);}
}// 打印链表
void printList(Node* head) {Node* t= head;while (t!= NULL) {printf("%d ", t->data);t= t->next;}printf("\n");
}// 链表保存到文件
void saveListToFile(Node* head, const char* filename) {int fd = open(filename, O_WRONLY | O_CREAT | O_TRUNC, 0666);Node *t= head;while (t!= NULL) {if (write(fd, &t->data, sizeof(int)) != sizeof(int)) {perror("write failed");close(fd);exit(EXIT_FAILURE);}t= t->next;}close(fd);
}// 从文件加载到链表
Node* loadListFromFile(const char* filename) {int fd = open(filename, O_RDONLY);Node *head = NULL;Node *tail = NULL;int data;while (read(fd, &data, sizeof(data)) == sizeof(data)) {Node *newNode = createNode(data);if (head == NULL) {head = newNode;tail = newNode;} else {tail->next = newNode;tail = newNode;}}close(fd);return head;
}int main(int argc, const char *argv[])
{// 创建链表Node* head = NULL;insertNode(&head, 11);insertNode(&head, 22);insertNode(&head, 33);// 打印链表printf("原链表: ");printList(head);// 保存链表到文件saveListToFile(head, "list_data.txt");// 释放链表freeList(head);// 从文件加载到链表head = loadListFromFile("list_data.txt");// 打印链表printf("加载后的链表: ");printList(head);// 释放链表freeList(head);return 0;
}

运行结果 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/68362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【景区导游——LCA】

题目 代码 #include <bits/stdc.h> using namespace std; using ll long long; const int N 1e5 10; const int M 2 * N; int p[N][18], d[N], a[N]; ll dis[N][18]; //注意这里要开long long int h[N], e[M], ne[M], idx, w[M]; int n, k; void add(int a, int b, …

Vue 3 30天精进之旅:Day 06 - 表单输入绑定

引言 在前几天的学习中&#xff0c;我们探讨了事件处理的基本概念及其在Vue中的应用。今天&#xff0c;我们将进一步了解Vue的表单输入绑定。这是构建用户交互式应用的核心部分&#xff0c;使得我们能够方便地处理用户输入并实时更新数据。本文将介绍如何在Vue中实现单向和双向…

二进制安卓清单 binary AndroidManifest - XCTF apk 逆向-2

XCTF 的 apk 逆向-2 题目 wp&#xff0c;这是一道反编译对抗题。 题目背景 AndroidManifest.xml 在开发时是文本 xml&#xff0c;在编译时会被 aapt 编译打包成为 binary xml。具体的格式可以参考稀土掘金 MindMac 做的类图&#xff08;2014&#xff09;&#xff0c;下面的博…

反向代理模块。。

1 概念 1.1 反向代理概念 反向代理是指以代理服务器来接收客户端的请求&#xff0c;然后将请求转发给内部网络上的服务器&#xff0c;将从服务器上得到的结果返回给客户端&#xff0c;此时代理服务器对外表现为一个反向代理服务器。 对于客户端来说&#xff0c;反向代理就相当于…

AI常见的算法

人工智能&#xff08;AI&#xff09;中常见的算法分为多个领域&#xff0c;如机器学习、深度学习、强化学习、自然语言处理和计算机视觉等。以下是一些常见的算法及其用途&#xff1a; 1. 机器学习 (Machine Learning) 监督学习 (Supervised Learning) 线性回归 (Linear Regr…

flink StreamGraph解析

Flink程序有三部分operation组成&#xff0c;分别是源source、转换transformation、目的地sink。这三部分构成DAG。 DAG首先生成的是StreamGraph。 用户代码在添加operation的时候会在env中缓存&#xff08;变量transformations&#xff09;&#xff0c;在env.execute()执行的…

WPS数据分析000010

基于数据透视表的内容 一、排序 手动调动 二、筛选 三、值显示方式 四、值汇总依据 五、布局和选项 不显示分类汇总 合并居中带标签的单元格 空单元格显示 六、显示报表筛选页

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.18 逻辑运算引擎:数组条件判断的智能法则

1.18 逻辑运算引擎&#xff1a;数组条件判断的智能法则 1.18.1 目录 #mermaid-svg-QAFjJvNdJ5P4IVbV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QAFjJvNdJ5P4IVbV .error-icon{fill:#552222;}#mermaid-svg-QAF…

Tensor 基本操作2 理解 tensor.max 操作,沿着给定的 dim 是什么意思 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作1 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 目录 Tensor 基本操作torch.max默认指定维度 Tensor 基本操作 torch.max torch.max 实现降维运算&#xff0c;基于指定的 d…

【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程

1. 简介 UDP协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;全称用户数据报协议&#xff0c;它是一种面向非连接的协议&#xff0c;面向非连接指的是在正式通信前不必与对方先建立连接&#xff0c; 不管对方状态就直接发送。至于对方是否可以接收到这些数据内…

动手学深度学习-卷积神经网络-3填充和步幅

目录 填充 步幅 小结 在上一节的例子&#xff08;下图&#xff09; 中&#xff0c;输入的高度和宽度都为3&#xff0c;卷积核的高度和宽度都为2&#xff0c;生成的输出表征的维数为22。 正如我们在 上一节中所概括的那样&#xff0c;假设输入形状为nhnw&#xff0c;卷积核形…

Airflow:精通Airflow任务依赖

任务依赖关系是任何工作流管理系统的核心概念&#xff0c;Apache Airflow也不例外。它们确定在工作流中执行任务的顺序和条件&#xff0c;确保以正确的顺序完成任务&#xff0c;并确保在相关任务开始之前成功完成先决任务。在本文中我们将探讨Apache Airflow中的任务依赖关系&a…

【数据结构】_链表经典算法OJ:合并两个有序数组

目录 1. 题目描述及链接 2. 解题思路 3. 程序 3.1 第一版 3.2 第二版 1. 题目描述及链接 题目链接&#xff1a;21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给…

crontabl循环定时任务和at一次性任务深度使用

文章目录 crontabl【循环定时任务】crontabl说明参数说明格式说明使用示例使用实例脚本无法执行问题官方解决方法crontabl执行报错解决办法crontab中expect脚本不能正常运行解决方案定时任务执行sh脚本中含有的expect脚本方法给crontab添加环境变量 at【一次性定时任务】说明参…

ChatGPT高效处理图片技巧使用详解

ChatGPT&#xff0c;作为OpenAI开发的预训练语言模型&#xff0c;主要用于生成自然语言文本的任务。然而&#xff0c;通过一些技巧和策略&#xff0c;我们可以将ChatGPT与图像处理模型结合&#xff0c;实现一定程度上的图像优化和处理。本文将详细介绍如何使用ChatGPT高效处理图…

全程Kali linux---CTFshow misc入门

图片篇(基础操作) 第一题&#xff1a; ctfshow{22f1fb91fc4169f1c9411ce632a0ed8d} 第二题 解压完成后看到PNG&#xff0c;可以知道这是一张图片&#xff0c;使用mv命令或者直接右键重命名&#xff0c;修改扩展名为“PNG”即可得到flag。 ctfshow{6f66202f21ad22a2a19520cdd…

基于SMPL的三维人体重建-深度学习经典方法之VIBE

本文以开源项目VIBE[1-2]为例&#xff0c;介绍下采用深度学习和SMPL模板的从图片进行三维人体重建算法的整体流程。如有错误&#xff0c;欢迎评论指正。 一.算法流程 包含生成器模块和判别器模块&#xff0c;核心贡献就在于引入了GRU模块&#xff0c;使得当前帧包含了先前帧的先…

深入浅出Linux操作系统大数据定制Shell编程(六)

深入浅出Linux操作系统大数据定制Shell编 1、大数据定制-Shell编程1.1、什么是Shell1.2、Shell脚本执行方式 2、Shell变量2.1、shell变量的定义2.1.1、设置环境变量2.1.2、多行注释 2.2、位置参数变量2.2.1、语法 2.3、预定义变量2.4、运算符2.4.1、条件判断2.4.2、case语句2.4…

SQL-leetcode—1174. 即时食物配送 II

1174. 即时食物配送 II 配送表: Delivery ------------------------------------ | Column Name | Type | ------------------------------------ | delivery_id | int | | customer_id | int | | order_date | date | | customer_pref_delivery_date | date | -------------…