JavaScript 中的数据结构与算法:数组、链表、栈、队列等

简介: 在JavaScript中,数据结构和算法是非常重要的主题,它们用于有效地组织和处理数据。下面介绍几种常见的数据结构和算法:

在JavaScript中,数据结构和算法是非常重要的主题,它们用于有效地组织和处理数据。下面介绍几种常见的数据结构和算法:

1. 数组(Array)

数组是一种线性数据结构,用于存储一组有序的元素。在JavaScript中,数组是动态大小的,可以容纳不同类型的元素。

创建数组

// 创建一个空数组
const array1 = [];

// 创建一个带有元素的数组
const array2 = [1, 2, 3, 4];
const array3 = ['apple', 'banana', 'orange'];

常用操作

// 获取数组长度
const length = array2.length; // Output: 4

// 访问数组元素
const element = array2[0]; // Output: 1

// 添加元素到数组末尾
array2.push(5); // array2: [1, 2, 3, 4, 5]

// 删除数组末尾的元素
array2.pop(); // array2: [1, 2, 3, 4]

// 在指定位置添加/删除元素
array2.splice(2, 0, 6); // array2: [1, 2, 6, 3, 4]

// 遍历数组
array2.forEach((element) => console.log(element));

2. 链表(Linked List)

链表是一种线性数据结构,由一系列节点组成,每个节点包含两个部分:数据和指向下一个节点的引用。

创建链表

class Node {
   
  constructor(data) {
   
    this.data = data;
    this.next = null;
  }
}

class LinkedList {
   
  constructor() {
   
    this.head = null;
  }
}

常用操作

// 添加节点到链表末尾
function append(data) {
   
  const newNode = new Node(data);
  if (!this.head) {
   
    this.head = newNode;
  } else {
   
    let current = this.head;
    while (current.next) {
   
      current = current.next;
    }
    current.next = newNode;
  }
}

// 删除指定数据的节点
function remove(data) {
   
  if (!this.head) return;
  if (this.head.data === data) {
   
    this.head = this.head.next;
  } else {
   
    let current = this.head;
    let prev = null;
    while (current && current.data !== data) {
   
      prev = current;
      current = current.next;
    }
    if (!current) return; // Data not found
    prev.next = current.next;
  }
}

// 遍历链表
function print() {
   
  let current = this.head;
  while (current) {
   
    console.log(current.data);
    current = current.next;
  }
}

3. 栈(Stack)

栈是一种后进先出(LIFO)的数据结构,只能在一端(称为栈顶)进行插入和删除操作。

创建栈

class Stack {
   
  constructor() {
   
    this.items = [];
  }

  push(element) {
   
    this.items.push(element);
  }

  pop() {
   
    return this.items.pop();
  }

  peek() {
   
    return this.items[this.items.length - 1];
  }

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

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

  clear() {
   
    this.items = [];
  }
}

使用栈

const stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);

console.log(stack.pop()); // Output: 3
console.log(stack.peek()); // Output: 2
console.log(stack.isEmpty()); // Output: false
console.log(stack.size()); // Output: 2
stack.clear();
console.log(stack.isEmpty()); // Output: true

4. 队列(Queue)

队列是一种先进先出(FIFO)的数据结构,元素只能在一端(称为队尾)插入,在另一端(称为队首)删除。

创建队列

class Queue {
   
  constructor() {
   
    this.items = [];
  }

  enqueue(element) {
   
    this.items.push(element);
  }

  dequeue() {
   
    return this.items.shift();
  }

  front() {
   
    return this.items[0];
  }

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

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

  clear() {
   
    this.items = [];
  }
}

使用队列

const queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);

console.log(queue.dequeue()); // Output: 1
console.log(queue.front()); // Output: 2
console.log(queue.isEmpty()); // Output: false
console.log(queue.size()); // Output: 2
queue.clear();
console.log(queue.isEmpty()); // Output: true

以上是JavaScript中常见的几种数据结构和算法的简介。它们都有不同的特点和适用场景,在实际开发中,根据需求选择合适的数据结构和算法能够提高代码效率和可读性。

相关文章
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
65 1
|
1月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
45 0
|
1月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
43 0
|
1月前
|
算法
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
【❤️算法笔记❤️】-每日一刷-23、合并 K 个升序链表
32 0
|
1月前
|
存储 算法
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
【❤️算法笔记❤️】-每日一刷-21、合并两个有序链表
87 0
|
17天前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
17天前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
1月前
|
存储 缓存 算法
经典算法之链表篇(三)
经典算法之链表篇(三)
|
1月前
|
算法
经典算法之链表篇(二)
经典算法之链表篇(二)
|
1月前
|
算法 索引
经典算法之链表篇
经典算法之链表篇