JavaScript is required

2025-12-26-Javascript/TypeScript 的顺序表,链表实现

JavaScript 原生提供了 Array 作为高效的动态顺序表实现,但为了理解底层原理,通常需要手动实现。链表则需要完全手动实现,因为 JavaScript 无内置链表结构。

算法#数据结构#顺序表#链表#TypeScript

JavaScript 原生提供了 Array 作为高效的动态顺序表实现,但为了理解底层原理,通常需要手动实现。链表则需要完全手动实现,因为 JavaScript 无内置链表结构。

以下分别提供两种数据结构的完整实现,包括基本操作(插入、删除、查找、遍历等),并附带说明。

1. 顺序表(基于数组的动态顺序表)

顺序表的核心是连续存储,使用数组实现

JavaScript
// 创建顺序表
const seqList = [];

// 添加元素
seqList.push(10);
seqList.push(20);
seqList.push(30);

// 在索引 1 处插入 15
seqList.splice(1, 0, 15);  // [10, 15, 20, 30]

// 修改索引 2 处的元素
seqList[2] = 25;           // [10, 15, 25, 30]

// 删除索引 0 处的元素
seqList.splice(0, 1);      // [15, 25, 30]

// 输出长度和内容
console.log('长度:', seqList.length);  // 3
console.log('内容:', seqList);         // [15, 25, 30]

手动实现如下:

2. 链表(单向链表)

链表使用节点分散存储,支持高效的插入和删除(O(1)),但随机访问较慢(O(n))



LRU 缓存的实现(使用双向链表 + HashMap)

LRU(Least Recently Used)缓存是一种常见的数据结构,用于实现固定容量缓存,当容量满时淘汰最近最少使用的元素。在 JavaScript 中,最高效的实现方式是结合双向链表(控制访问顺序)和Map(或对象)作为哈希表(实现 O(1) 访问)

JS实现:

TS实现

使用双向链表结合 Map(Map 在 TypeScript 中天然支持泛型)实现 O(1) 时间复杂度的 get 和 put 操作

链表反转的实现

单向链表的反转实现,包括迭代和递归两种方式

JS实现

TS实现

DFA:

  • 顺序表:适合随机访问(O(1)),插入/删除较慢(O(n)),实现简单,内存连续
  • 链表:适合频繁插入/删除(O(1)),随机访问慢(O(n)),内存分散,支持动态扩展, 链表常用于特定算法(如 LRU 缓存、链表反转等)