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 语言实现链表和文件操作的基本知识。

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

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

相关文章

  • Windows7系统如何批量提取文件名?

    Windows7系统提供了多种方法来批量提取文件名,以下是详细攻略: 1. 使用“cmd”命令行 打开“cmd”命令行,进入你想要提取文件名的目录 输入以下命令: dir /b > filename.txt 这会将当前目录下所有文件的名称(不包括子目录)输出到“filename.txt”文件中。3. 按回车键执行命令后,将在当前目录下生成“filena…

    other 2023年6月26日
    00
  • Taro小程序自定义顶部导航栏功能的实现

    下面是关于“Taro小程序自定义顶部导航栏功能的实现”的完整攻略: 一、背景 在Taro小程序开发中,如果想要实现自定义顶部导航栏的功能,需要了解Taro框架提供的相关API和组件,才能进行相应的开发实现。 二、Taro自定义导航栏的实现方法 具体的实现方法为,在Taro小程序中进行页面的渲染时,通过自定义导航栏组件,将导航栏的样式和页面内容分开实现,从而在…

    other 2023年6月25日
    00
  • 怎样让网站的关键词排名更安稳?长期稳定网站排名六大技巧

    怎样让网站的关键词排名更安稳?长期稳定网站排名六大技巧 在优化网站关键词排名的过程中,我们希望能够实现长期的稳定性。下面是六个技巧,可以帮助你达到这个目标。 1. 优化网站内容 确保网站内容与关键词相关性高:将关键词自然地融入网站内容中,但不要过度堆砌关键词。 提供有价值的内容:确保网站内容对用户有帮助,能够解决他们的问题或提供有用的信息。 定期更新网站内容…

    other 2023年9月6日
    00
  • 通过注册表为各类文本编辑器添加到右键

    为各类文本编辑器添加到右键菜单可以方便地打开编辑器并直接打开文件。下面是具体的操作步骤: 打开注册表编辑器 在 Windows 操作系统中搜索“regedit.exe”,打开注册表编辑器。 找到 “HKEY_CLASSES_ROOT” 路径 在注册表编辑器中,展开“HKEY_CLASSES_ROOT”路径。 找到文本文件的种类 在“HKEY_CLASSES_…

    other 2023年6月27日
    00
  • 一种简单的实现:Android一键换肤功能

    一种简单的实现:Android一键换肤功能 Android的一键换肤功能对于许多用户来说可以提供更好的使用体验,但是多数实现方式较为复杂,需要进行大量的代码修改和复制,使得实现过程相当麻烦。本篇文章将介绍一种简单的实现方式,帮助开发人员快速完成Android一键换肤功能。 实现原理 一种简单的实现Android一键换肤功能的方式包括以下几个步骤: 定义皮肤资…

    其他 2023年3月28日
    00
  • ARM汇编判断之如何用汇编判断数组中正负数个数

    ARM汇编判断数组中正负数个数的攻略 在ARM汇编中,我们可以使用一些指令和技巧来判断数组中正负数的个数。下面是一个完整的攻略,包含了两个示例说明。 步骤1:初始化计数器 首先,我们需要初始化两个计数器,一个用于记录正数的个数,另一个用于记录负数的个数。我们可以使用寄存器来保存这些计数器的值。 MOV r0, #0 ; 初始化正数计数器为0 MOV r1, …

    other 2023年8月5日
    00
  • Win11 exe应用程序打不开怎么办?Win11无法打开exe程序解决方法

    Win11是Windows操作系统的新版本,一些用户在使用Win11操作系统时可能会遇到exe应用程序打不开的问题。在Win11无法打开exe程序时,需要根据具体情况进行排查。以下是解决Win11 exe应用程序打不开的方法。 方法一:检查杀毒软件是否拦截 部分杀毒软件会将某些exe程序识别为病毒或威胁,从而阻止exe程序运行。当遇到Win11无法打开exe…

    other 2023年6月25日
    00
  • 你该知道的Gradle配置知识总结

    你该知道的Gradle配置知识总结 Gradle是一种强大的构建工具,用于构建和管理项目。在本攻略中,我们将详细讲解一些你应该知道的Gradle配置知识,并提供两个示例说明。 1. Gradle配置文件 Gradle使用Groovy或Kotlin编写的配置文件来定义项目的构建逻辑。常见的配置文件包括: settings.gradle:用于配置项目的设置和包含…

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