21xrx.com
2025-03-23 07:24:49 Sunday
文章检索 我的文章 写文章
C++实现文件到链表的数据读取
2023-06-22 13:45:22 深夜i     18     0
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库来读取文件,定义一个包含数据的结构体和链表,并将每个数据元素添加到链表中。需要注意的是,我们还需要记得在程序结束时释放链表所占用的内存。

  
  

评论区