21xrx.com
2024-09-19 09:59:18 Thursday
登录
文章检索 我的文章 写文章
C++实现文件到链表的数据读取
2023-06-22 13:45:22 深夜i     --     --
C++ 文件读取 链表 数据结构

C++是现代编程领域中使用最广泛的一门语言,其强大的数据处理和操作能力使得它成为了非常实用的编程工具。当我们需要从文件中读取数据并将数据存储在内存中时,我们可以使用链表数据结构来存储数据。在这篇文章中,我们将讨论如何使用C++来实现将文件数据读取到链表中。

首先,在C++中,我们可以使用fstream库来读取文件。在打开文件并读取数据之前,我们需要定义一个我们所需读取数据的结构。在这个例子中,我们需要读取三个不同的值:ID,姓名和年龄。

接下来,我们需要定义一个结构体来存储这些值,代码如下:


struct Person

{

  int ID;

  string name;

  int age;

  Person* next;

};

现在我们已经定义了一个包含ID,姓名和年龄的结构体,并将其指针作为链表指针,接下来就可以开始读取文件数据了。

在将数据读取到链表之前,我们需要定义一个指向链表开始位置的指针,最初指向空值。在读取每个人的数据时,我们动态创建一个新的节点并将数据添加到节点中,然后用链表指针指向该新节点。

以下是完整的实现代码:


#include <iostream>

#include <fstream>

#include <string>

using namespace std;

// 定义 Person 结构体

struct Person

{

  int ID;

  string name;

  int age;

  Person* next;

};

int main()

{

  // 定义首节点指针

  Person* head = nullptr;

  // 打开存储有 Person 数据的文件

  ifstream input_file("people_data.txt");

  // 如果文件成功打开,则读取文件中的数据

  if (input_file.is_open())

  {

    char delimiter = ',';

    while (!input_file.eof())

    {

      // 动态创建一个新节点

      Person* newNode = new Person;

      // 从文件中读取每个人的数据

      input_file >> newNode->ID >> delimiter;

      getline(input_file, newNode->name, delimiter);

      input_file >> newNode->age >> delimiter;

      // 将节点添加到链表中

      newNode->next = head;

      head = newNode;

    }

    input_file.close();

  }

  else

  

    cout << "Failed to open file." << endl;

  

  // 输出链表中的所有数据

  Person* current = head;

  while (current != nullptr)

   Name: " << current->name << "

  // 释放链表节点占用的内存

  while (head != nullptr)

  {

    Person* current = head->next;

    delete head;

    head = current;

  }

  return 0;

}

在这个例子中,我们首先定义了一个指向链表开始位置的指针head,并初始化为nullptr。然后,我们打开包含人员数据的文件,并使用while循环读取每个人的数据,将数据存储在一个动态分配的节点中,并将该节点添加到链接列表中。最后,我们通过使用链表指针来遍历链表,并输出所有人员数据。

需要注意的一点是,读取数据后,我们需要将新节点的`next`指向当前链表的头部,并将链表头指向新的节点,这样我们可以正确地添加新节点并保证链表的顺序。

此外,我们还需要在程序结束时释放链表占用的内存。因此,我们在代码末尾使用while循环来释放链表的所有节点所占用的内存。

总的来说,在C++中实现将文件数据读取到链表中是一个相对简单而又实用的操作。我们只需要使用fstream库来读取文件,定义一个包含数据的结构体和链表,并将每个数据元素添加到链表中。需要注意的是,我们还需要记得在程序结束时释放链表所占用的内存。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复