JavaScript 有哪些数据结构

引言

数据结构是计算机科学中一个重要的概念,它用于组织和存储数据以及操作数据的方式。在 JavaScript 中,也有许多常用的数据结构。本文将介绍 JavaScript 中常见的数据结构,并通过代码示例来帮助读者更好地理解。

数组 (Array)

数组是 JavaScript 中最常见的数据结构之一。它用于存储一组有序的数据,并通过索引来访问每个元素。在 JavaScript 中,数组可以存储任意类型的数据,如数字、字符串、对象等。

下面是一个创建和操作数组的代码示例:

// 创建一个数组
const fruits = ['apple', 'banana', 'orange'];

// 访问数组元素
console.log(fruits[0]); // 输出: apple

// 修改数组元素
fruits[1] = 'grape';
console.log(fruits); // 输出: ['apple', 'grape', 'orange']

// 遍历数组
for (let i = 0; i < fruits.length; i++) {
  console.log(fruits[i]);
}

对象 (Object)

对象是 JavaScript 中另一个常见的数据结构。它是一种无序的键值对集合,每个键都是唯一的。对象可以存储任意类型的值,包括函数、数组和其他对象。

下面是一个创建和操作对象的代码示例:

// 创建一个对象
const person = {
  name: 'Alice',
  age: 25,
  hobbies: ['reading', 'painting'],
  address: {
    street: '123 Main St',
    city: 'New York'
  }
};

// 访问对象属性
console.log(person.name); // 输出: Alice
console.log(person.hobbies[0]); // 输出: reading
console.log(person.address.city); // 输出: New York

// 修改对象属性
person.age = 30;
console.log(person); // 输出: { name: 'Alice', age: 30, ... }

// 遍历对象属性
for (let key in person) {
  console.log(key + ': ' + person[key]);
}

链表 (LinkedList)

链表是一种线性数据结构,它由一系列节点组成,每个节点都包含一个指向下一个节点的引用。链表相对于数组来说,插入和删除元素的操作更加高效。但是,访问链表中的任意元素需要从头开始遍历。

下面是一个创建和操作链表的代码示例:

// 定义链表节点
class Node {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

// 创建链表
const list = new Node(1);
list.next = new Node(2);
list.next.next = new Node(3);

// 遍历链表
let current = list;
while (current != null) {
  console.log(current.value);
  current = current.next;
}

栈 (Stack)

栈是一种后进先出 (LIFO) 的数据结构,在栈中,最后插入的元素最先被访问。栈常用于处理递归、回溯和表达式求值等问题。

下面是一个创建和操作栈的代码示例:

// 创建一个栈
const stack = [];

// 入栈操作
stack.push(1);
stack.push(2);
stack.push(3);

// 出栈操作
console.log(stack.pop()); // 输出: 3
console.log(stack.pop()); // 输出: 2
console.log(stack.pop()); // 输出: 1

队列 (Queue)

队列是一种先进先出 (FIFO) 的数据结构,在队列中,最先插入的元素最先被访问。队列常用于处理广度优先搜索和任务调度等问题。

下面是一个创建和操作队列的代码示例:

// 创建一个队列
const queue = [];

// 入队操作
queue.push(1);
queue.push(2);
queue.push(3);

// 出队操作
console.log(queue.shift()); // 输出: 1
console.log(queue.shift()); // 输出: 2
console.log(queue.shift()); // 输出: 3

关系图

下面是一个使用 mermaid 语法绘制的数据结构关系图:

erDiagram
    Array ||.. LinkedList
    Object ||.. LinkedList
    Array ||.. Stack
    Array ||.. Queue
``