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
``