📜  将链表读写到文件 - TypeScript (1)

📅  最后修改于: 2023-12-03 15:25:22.506000             🧑  作者: Mango

将链表读写到文件 - TypeScript

本文介绍如何将 TypeScript 实现的链表读写到文件中。首先需要实现链表节点和链表的基本数据结构。

数据结构定义
class Node<T> {
  data: T;
  next: Node<T> | null;

  constructor(data: T) {
    this.data = data;
    this.next = null;
  }
}

class LinkedList<T> {
  head: Node<T> | null;
  tail: Node<T> | null;

  constructor() {
    this.head = null;
    this.tail = null;
  }

  // 链表插入节点等方法
  // ...
}
将链表写入文件

为了将链表写入文件,我们需要使用 Node.js 内置的文件系统模块 fs

import * as fs from 'fs';

function writeLinkedListToFile<T>(list: LinkedList<T>, filename: string) {
  const stream = fs.createWriteStream(filename);
  stream.once('open', () => {
    let curr = list.head;
    while (curr) {
      stream.write(`${curr.data}\n`);
      curr = curr.next;
    }
    stream.end();
  });
}

以上函数读取链表中的每个节点数据,并将其逐行写入文件。

从文件中读取链表

要从文件中读取链表,我们需要使用 Node.js 的逐行读取模块 readline

import * as readline from 'readline';

function readLinkedListFromFile<T>(filename: string) {
  const list = new LinkedList<T>();

  const stream = fs.createReadStream(filename);
  const rl = readline.createInterface({input: stream});

  rl.on('line', (data) => {
    list.add(data);
  });

  return new Promise<LinkedList<T>>((resolve) => {
    rl.on('close', () => {
      resolve(list);
    });
  });
}

以上函数读取文件中的每一行,并逐个添加到链表中。将链表返回的函数使用了 Promise 封装,以便在文件读取完成时 resolve 链表。

示例用法
async function main() {
  const list = new LinkedList<number>();
  list.add(1);
  list.add(2);
  list.add(3);

  await writeLinkedListToFile(list, 'data.txt');

  const newList = await readLinkedListFromFile<number>('data.txt');
  console.log(newList.toArray()); // [1, 2, 3]
}

main();

以上代码示例创建了一个包含数字 1, 2, 3 的链表,并将其写入文件。然后再从文件中读取链表,并将链表的内容输出到控制台。

总结

本文介绍了如何将 TypeScript 实现的链表写入文件并从文件中读取链表。使用 Node.js 的文件系统和逐行读取模块,可以轻松地将链表持久化到磁盘上。