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

yizhihongxing

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

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

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日

相关文章

  • xgboost、lightgbm、catboost总结

    xgboost、lightgbm、catboost总结 在机器学习和数据分析领域,各种强大的算法和工具层出不穷。在分类和回归等任务中,xgboost、lightgbm和catboost是三个备受欢迎的梯度提升决策树库,它们都是基于GBDT原理的,通过梯度提升的方法,依次训练出多个决策树,并将它们组合起来达到更准确的效果。 xgboost xgboost(eX…

    其他 2023年3月28日
    00
  • xna4.0环境搭建和helloworld windowsphone游戏开发

    XNA 4.0 环境搭建和 HelloWorld Windows Phone 游戏开发 XNA 是一款适用于开发 Windows Phone 游戏的框架。本文将介绍如何搭建 XNA 4.0 环境以及创建一个简单的 HelloWorld Windows Phone 游戏。 XNA 4.0 环境搭建 安装 Visual Studio 首先需要安装 Visual …

    其他 2023年3月28日
    00
  • React组件的生命周期详解

    React组件的生命周期可以分为三个阶段: 挂载阶段(Mounting) 更新阶段(Updating) 卸载阶段(Unmounting) 在接下来的讲解中,我们将深入探讨每个阶段的具体生命周期函数及其作用。同时,我们也会为每个函数提供示例说明。 挂载阶段(Mounting) 在组件挂载之前和之后,React会依次调用以下生命周期函数: constructor…

    other 2023年6月27日
    00
  • 探讨各种PHP字符串函数的总结分析

    探讨各种 PHP 字符串函数的总结分析: PHP 字符串常用函数 strlen($string): 返回字符串的长度。 str_replace($search, $replace, $string): 查找指定字符并替换为另一个字符。 substr($string, $start, $length): 给定字符串的起始位置和长度,返回一段子字符串。 strp…

    other 2023年6月20日
    00
  • .ipch文件和.sdf文件是什么文件?重要吗能删吗?

    .ipch文件和.sdf文件是Visual Studio所生成的两个辅助文件,它们的作用是提高编译速度和提供代码智能提示等编辑器功能。以下是对它们的详细讲解和相关操作方法: 什么是.ipch文件? .ipch文件是IntelliSense Precompiled Header的缩写,即IntelliSense预编译头文件。这个文件主要存储了项目内的标头文件的…

    other 2023年6月26日
    00
  • Android实现两个数相加功能

    Android实现两个数相加功能的完整攻略 步骤一:创建布局文件 首先,我们需要创建一个布局文件来显示用户界面。在res/layout目录下创建一个新的XML文件,例如activity_main.xml,并添加以下代码: <LinearLayout xmlns:android=\"http://schemas.android.com/apk/…

    other 2023年9月6日
    00
  • 全面解析Bootstrap表单使用方法(表单控件)

    全面解析Bootstrap表单使用方法(表单控件) 什么是Bootstrap表单控件? Bootstrap表单控件是Bootstrap框架的一部分,它提供了一套预定义的、可重用的表单样式和布局,可以方便地构建各种类型的表单。 Bootstrap表单控件的结构 Bootstrap表单控件通常由以下元素组成: 表单标签(<form>元素) 表单组(&…

    other 2023年6月27日
    00
  • 常用的压缩软件有哪些 五种常用压缩软件介绍

    常用的压缩软件有哪些 压缩软件是用于将文件或文件夹压缩成更小的文件,以便于存储和传输的工具。以下是五种常用的压缩软件的介绍: WinRAR:WinRAR 是一款功能强大的压缩软件,支持多种压缩格式,包括RAR、ZIP、7Z等。它具有高压缩比和快速压缩速度的特点,同时还支持加密和分卷压缩等功能。例如,你可以使用 WinRAR 压缩一个文件夹,并将其分成多个压缩…

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