引言:为什么算法和数据结构在 TypeScript 中很重要?
在现代 Web 开发中,TypeScript 占据领先地位,它提供了严格的类型化和强大的工具来构建可扩展的应用程序。然而,如果不理解基础的算法和数据结构,即使是最优雅的代码也不会高效。本文是您进入 TypeScript 优化代码世界的指南。我们将剖析关键的数据结构,展示如何结合类型实现它们,并探讨经典算法。阅读后,您将能够编写不仅可运行,而且快速、可预测的代码。
1. 带类型化的基础数据结构
TypeScript 允许严格定义数据结构中可以存储哪些数据类型。这可以在编译阶段防止错误。让我们来看三种基础结构。
1.1. 栈 (Stack) — LIFO 原则
栈遵循“后进先出”(Last In, First Out)的原则。它非常适合需要撤销操作的场景(例如,浏览器历史记录)。
// 使用泛型 T 实现栈class Stack<T> { private items: T[] = [];
push(item: T): void { this.items.push(item); }
pop(): T | undefined { return this.items.pop(); }
peek(): T | undefined { return this.items[this.items.length - 1]; }
isEmpty(): boolean { return this.items.length === 0; }}
// 使用示例const numberStack = new Stack<number>();numberStack.push(10);numberStack.push(20);console.log(numberStack.pop()); // 201.2. 队列 (Queue) — FIFO 原则
队列遵循“先进先出”(First In, First Out)的原则。它用于按到达顺序处理任务,例如在消息队列系统中。
class Queue<T> { private items: T[] = [];
enqueue(item: T): void { this.items.push(item); }
dequeue(): T | undefined { return this.items.shift(); }
front(): T | undefined { return this.items[0]; }
size(): number { return this.items.length; }}
// 使用自定义类型的示例interface Task { id: number; name: string;}const taskQueue = new Queue<Task>();taskQueue.enqueue({ id: 1, name: '处理订单' });taskQueue.enqueue({ id: 2, name: '发送邮件' });1.3. 链表 (Linked List)
链表由节点组成,每个节点都引用下一个节点。与数组不同,在链表中间插入和删除元素不需要移动所有元素。
class ListNode<T> { value: T; next: ListNode<T> | null = null;
constructor(value: T) { this.value = value; }}
class LinkedList<T> { private head: ListNode<T> | null = null;
add(value: T): void { const newNode = new ListNode(value); if (!this.head) { this.head = newNode; return; } let current = this.head; while (current.next) { current = current.next; } current.next = newNode; }
print(): void { let current = this.head; while (current) { console.log(current.value); current = current.next; } }}
// 使用const list = new LinkedList<string>();list.add('TypeScript');list.add('Python');list.print(); // TypeScript, Python2. 排序和搜索算法
数据排序是最常见的操作之一。TypeScript 允许创建可以与任何数据类型一起工作的通用函数。
2.1. 快速排序 (Quick Sort)
这是最高效的算法之一,具有