📅  最后修改于: 2023-12-03 15:25:22.506000             🧑  作者: Mango
本文介绍如何将 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 的文件系统和逐行读取模块,可以轻松地将链表持久化到磁盘上。