TypeScript 算法与数据结构:完整指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 中的算法与数据结构:从入门到精通

算法与数据结构是所有现代软件开发的基础。无论你是在编写 React 前端、Node.js 后端还是移动应用,深入理解这些概念都能帮助你创建高效、可扩展且快速的应用程序。在本文中,我们将全面探讨 TypeScript 中的关键算法与数据结构——这是一种结合了 JavaScript 灵活性与静态类型严谨性的语言。

TypeScript 是学习算法的理想选择:严格的类型有助于在编译阶段避免错误,而泛型支持则允许创建通用且可复用的数据结构。我们将从简单的概念开始,逐步深入到更复杂的主题,每一步都配有清晰的代码示例。



1. 基础数据结构:栈与队列

栈和队列是基础的线性数据结构,应用无处不在:从管理浏览器历史记录到操作系统中的任务调度。让我们看看它们在 TypeScript 中的实现。



栈(后进先出)

栈遵循"后进先出"原则。主要操作有:push(添加元素)和 pop(移除最后一个元素)。

class Stack<T> {    private items: T[] = [];

push(element: T): void { this.items.push(element); }

pop(): T | undefined { return this.items.pop(); }

peek(): T | undefined { return this.items[this.items.length - 1]; }

isEmpty(): boolean { return this.items.length === 0; }

size(): number { return this.items.length; }}

// Example usageconst stack = new Stack<number>();stack.push(1);stack.push(2);stack.push(3);console.log(stack.pop()); // 3console.log(stack.peek()); // 2


队列(先进先出)

队列遵循"先进先出"原则。主要操作有:enqueue(在末尾添加)和 dequeue(从开头移除)。

class Queue<T> {    private items: T[] = [];

enqueue(element: T): void { this.items.push(element); }

dequeue(): T | undefined { return this.items.shift(); }

front(): T | undefined { return this.items[0]; }

isEmpty(): boolean { return this.items.length === 0; }

size(): number { return this.items.length; }}

// Example usageconst queue = new Queue<string>();queue.enqueue("First");queue.enqueue("Second");queue.enqueue("Third");console.log(queue.dequeue()); // "First"console.log(queue.front()); // "Second"


2. 搜索算法:线性搜索与二分搜索

数据搜索是编程中最常见的操作之一。我们将探讨两种主要方法:线性搜索(简单但慢)和二分搜索(快但需要数据已排序)。



线性搜索

该算法依次检查数组中的每个元素,直到找到目标。时间复杂度:O(n)。

function linearSearch<T>(arr: T[], target: T): number {    for (let i = 0; i < arr.length; i++) {        if (arr[i] === target) {            return i; // Returns the index of the found element        }    }    return -1; // Element not found}

// Exampleconst numbers = [10, 20, 30, 40, 50];console.log(linearSearch(numbers, 30)); // 2console.log(linearSearch(numbers, 60)); // -1


二分搜索

二分搜索仅适用于已排序数组。它每一步都将数组分成两半,丢弃其中一半

博客

书籍推荐