C 创建链表并将信息存储在二进制文件中读取的实例代码

创建链表并将信息存储在二进制文件中是一种常见的数据持久化方法,下面是一些步骤和示例代码:

步骤一:定义链表节点结构体和链表结构体

struct Node {
    int data;
    struct Node* next;
};

struct LinkedList {
    struct Node* head;
    int size;
};

步骤二:实现链表的基本操作,包括插入节点、删除节点、查找节点和打印链表等操作

下面是一些示例代码实现:

void insertNode(struct LinkedList* list, int value) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = value;
    newNode->next = NULL;

    if (list->head == NULL) {
        list->head = newNode;
    } else {
        struct Node* currNode = list->head;
        while (currNode->next != NULL) {
            currNode = currNode->next;
        }
        currNode->next = newNode;
    }
    list->size += 1;
}

void deleteNode(struct LinkedList* list, int value) {
    struct Node* currNode = list->head;
    struct Node* prevNode = NULL;
    while (currNode != NULL) {
        if (currNode->data == value) {
            if (prevNode == NULL) {
                list->head = currNode->next;
            } else {
                prevNode->next = currNode->next;
            }
            free(currNode);
            list->size -= 1;
            return;
        }
        prevNode = currNode;
        currNode = currNode->next;
    }
}

struct Node* findNode(struct LinkedList* list, int value) {
    struct Node* currNode = list->head;
    while (currNode != NULL) {
        if (currNode->data == value) {
            return currNode;
        }
        currNode = currNode->next;
    }
    return NULL;
}

void printList(struct LinkedList* list) {
    struct Node* currNode = list->head;
    while (currNode != NULL) {
        printf("%d ", currNode->data);
        currNode = currNode->next;
    }
    printf("\n");
}

步骤三:将链表信息存储在二进制文件中

我们可以使用 fwrite() 函数将链表信息存储在二进制文件中,每个节点的数据类型需要转换为二进制数据类型。

void saveListToFile(struct LinkedList* list, const char* fileName) {
    FILE* fp = fopen(fileName, "w+b");
    if (fp == NULL) {
        printf("Error: cannot open file %s.\n", fileName);
        return;
    }

    struct Node* currNode = list->head;
    while (currNode != NULL) {
        fwrite(&(currNode->data), sizeof(int), 1, fp);
        currNode = currNode->next;
    }

    fclose(fp);
}

步骤四:从二进制文件中读取链表信息

我们使用 fread() 函数从文件中读取链表信息,每个节点的数据类型需要转换为对应的数据类型。

void loadListFromFile(struct LinkedList* list, const char* fileName) {
    FILE* fp = fopen(fileName, "rb");
    if (fp == NULL) {
        printf("Error: cannot open file %s.\n", fileName);
        return;
    }

    int value = 0;
    while (fread(&value, sizeof(int), 1, fp) == 1) {
        insertNode(list, value);
    }

    fclose(fp);
}

示例一:将链表信息存储在文件中并打印出来

int main() {
    struct LinkedList list1 = {NULL, 0};
    insertNode(&list1, 1);
    insertNode(&list1, 2);
    insertNode(&list1, 3);
    insertNode(&list1, 4);
    printList(&list1);
    saveListToFile(&list1, "list.bin");

    struct LinkedList list2 = {NULL, 0};
    loadListFromFile(&list2, "list.bin");
    printList(&list2);

    return 0;
}

输出:

1 2 3 4 
1 2 3 4 

示例二:从文件中读取链表信息并删除某个节点后再将链表信息重新存储到文件中

int main() {
    struct LinkedList list = {NULL, 0};
    loadListFromFile(&list, "list.bin");
    deleteNode(&list, 3);
    printList(&list);
    saveListToFile(&list, "list.bin");

    return 0;
}

输出:

1 2 4 

这些是创建链表并将信息存储在二进制文件中读取的实例代码的完整攻略,通过这些代码,我们可以了解如何使用 C 语言实现链表和文件操作的基本知识。

阅读剩余 70%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C 创建链表并将信息存储在二进制文件中读取的实例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Spring Boot读取配置文件内容的3种方式(@Value、Environment和@ConfigurationProperties)

    当我们开发 Spring Boot 应用时,会遇到读取配置文件的场景,Spring Boot 框架提供了三种读取配置文件的方式,分别是: @Value:通过注解方式读取配置项的值。 Environment:通过 Environment 类对象读取配置项的值。 @ConfigurationProperties:通过自动映射读取属性文件或 yml 文件中所有以指…

    other 2023年6月25日
    00
  • MySQL正则表达式REGEXP使用详解

    当然!下面是关于\”MySQL正则表达式REGEXP使用详解\”的完整攻略: MySQL正则表达式REGEXP使用详解 MySQL中的REGEXP函数可以用于在查询中使用正则表达式进行模式匹配。以下是两个示例: 示例1:匹配以字母开头的字符串 SELECT * FROM table_name WHERE column_name REGEXP ‘^[A-Za-…

    other 2023年8月19日
    00
  • Spring超详细讲解创建BeanDefinition流程

    Spring超详细讲解创建BeanDefinition流程 在Spring框架中,BeanDefinition是用于描述和定义一个Bean的元数据信息的对象。它包含了Bean的类名、作用域、依赖关系等信息。本攻略将详细讲解Spring创建BeanDefinition的流程。 1. 创建BeanDefinition对象 首先,我们需要创建一个BeanDefin…

    other 2023年10月15日
    00
  • scp实现断点续传的方法

    SCP是一种在Linux系统中用于远程文件传输的协议,它可以通过SSH协议进行加密传输。在传输大文件时,可能会因为网络中断或其他原因导致传输失败,这时就需要使用断点续传功能。以下是使用SCP实现断点续传的完整攻略: 步骤一:安装rsync 在Linux中,可以使用rsync命令实现断点续传功能。如果系统中没有安装rsync,可以使用以下命令进行安装: apt…

    other 2023年5月8日
    00
  • linuxcentos7find命令

    以下是详细讲解“Linux CentOS 7 find命令的完整攻略”的标准Markdown格式文本,包含两个示例说明: Linux CentOS 7 find命令的完整攻略 在Linux CentOS 7中,find命令是一个非常有用的工具,可以用于查找文件和目录。本攻略将介绍如何使用find命令。 基本语法 find命令的基本语法如下: find [pa…

    other 2023年5月10日
    00
  • SSM实现mysql数据库账号密码密文登录功能

    下面我来为您详细讲解“SSM实现mysql数据库账号密码密文登录功能”的完整攻略。 1. 配置数据库 首先,我们需要在程序中配置 mysql 数据库。在 Spring 中,可以使用 MyBatis框架来操作数据库,因此我们需要引入 MyBatis相关依赖。 示例一: <!– 在 pom.xml 中引入 MyBatis 相关依赖 –> <…

    other 2023年6月27日
    00
  • Python 变量类型及命名规则介绍

    Python 变量类型及命名规则介绍 Python 是一种动态类型语言,它允许我们在不声明变量类型的情况下直接使用变量。在 Python 中,变量是用来存储数据的容器。在本攻略中,我们将详细介绍 Python 中的变量类型以及命名规则。 变量类型 Python 中有多种变量类型,包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)和…

    other 2023年8月9日
    00
  • 后缀名为.td的是什么文件td文件用什么打开?

    后缀名为.td的文件是通常用于存储表格数据的文件,它是Tableau软件的一种数据文件格式。Tableau是一款用于数据可视化和分析的强大工具,可以帮助用户将数据转化为易于理解和交互的图表和报表。 要打开.td文件,您需要安装Tableau软件,并按照以下步骤进行操作: 下载和安装Tableau软件:您可以从Tableau官方网站(https://www.t…

    other 2023年8月5日
    00
合作推广
合作推广
分享本页
返回顶部