在前端开发中,我们经常和数据打交道。而数据结构,就是组织和管理数据的方式。理解基本的数据结构,能让你写出更高效、更清晰的代码。
今天我们就用最简单的 JS 代码,带你认识五种常见数据结构:
✅ 线性结构:数组、栈、队列、链表
✅ 非线性结构:树(二叉树)
1. 数组(Array)—— 最基础的线性结构
数组是 JS 内置的数据结构,元素按顺序存储,通过索引访问。
let arr = [10, 20, 30];
console.log(arr[1]); // 输出 20
- 特点:支持随机访问,插入/删除较慢。
- 适用场景:已知长度、频繁读取的数据集合。
2. 栈(Stack)—— 后进先出(LIFO)
想象一摞书,只能从顶部拿或放。JS 可用数组模拟:
let stack = [];
stack.push(1); // 入栈
stack.push(2);
console.log(stack.pop()); // 出栈 → 输出 2
- 操作:
push()入栈,pop()出栈。 - 用途:函数调用栈、撤销操作、括号匹配等。
3. 队列(Queue)—— 先进先出(FIFO)
像排队买奶茶,先来的先走。JS 用 push + shift 模拟:
let queue = [];
queue.push('A'); // 入队
queue.push('B');
console.log(queue.shift()); // 出队 → 输出 'A'
- 注意:
shift()效率较低,实际项目可用双端队列优化。 - 用途:任务调度、消息队列、广度优先搜索(BFS)。
4. 链表(Linked List)—— 节点连成线
每个节点包含值和指向下一个节点的引用,不连续存储。
// 创建两个节点
let node1 = { value: 1, next: null };
let node2 = { value: 2, next: null };
// 连接它们
node1.next = node2;
console.log(node1.next.value); // 输出 2
- 优点:插入/删除快(只需改指针)。
- 缺点:不能直接通过索引访问。
- 用途:实现栈/队列、LRU 缓存等。
5. 树(Tree)—— 层级结构(以二叉树为例)
树由节点组成,每个节点最多有两个子节点(左、右)。
let tree = {
value: 1,
left: { value: 2, left: null, right: null },
right: { value: 3, left: null, right: null }
};
console.log(tree.left.value); // 输出 2
console.log(tree.right.value); // 输出 3
- 特点:非线性,适合表示层级关系。
- 用途:DOM 树、文件系统、搜索算法(如二叉搜索树)。
✅ 总结对比
| 结构 | 特点 | JS 简单实现 |
|---|---|---|
| 数组 | 连续存储,索引访问 | [1, 2, 3] |
| 栈 | 后进先出 | push() / pop() |
| 队列 | 先进先出 | push() / shift() |
| 链表 | 节点+指针 | {value, next} |
| 树 | 层级结构 | {value, left, right} |