Loading...

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

1. 数组(Array)

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

创建数组

1
2
3
4
5
6
// 创建一个空数组
const array1 = [];

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

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 获取数组长度
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)

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

创建链表

1
2
3
4
5
6
7
8
9
10
11
12
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}

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

常用操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 添加节点到链表末尾
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)的数据结构,只能在一端(称为栈顶)进行插入和删除操作。

创建栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 = [];
}
}

使用栈

1
2
3
4
5
6
7
8
9
10
11
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)的数据结构,元素只能在一端(称为队尾)插入,在另一端(称为队首)删除。

创建队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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 = [];
}
}

使用队列

1
2
3
4
5
6
7
8
9
10
11
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中常见的几种数据结构和算法的简介。它们都有不同的特点和适用场景,在实际开发中,根据需求选择合适的数据结构和算法能够提高代码效率和可读性。