返回
JavaScript 中的栈与队列:基础与应用
前端
2023-10-26 08:57:40
栈:后进先出
栈是一种后进先出(FILO)的数据结构,这意味着最近添加的元素将首先被移除。就像一叠盘子,你只能从栈顶添加或移除盘子。
栈的实现
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
}
栈的应用
- 后缀表达式求值: 后缀表达式是一种数学表达式,其中运算符写在操作数之后。例如,表达式
1 2 +
在后缀表达式中表示为1 2 +
。可以使用栈来计算后缀表达式。 - 函数调用: 当函数被调用时,函数的参数被压入栈中。当函数返回时,函数的参数被弹出栈。
- 内存管理: 栈也被用于内存管理。当一个函数被调用时,函数的局部变量被压入栈中。当函数返回时,函数的局部变量被弹出栈。
队列:先进先出
队列是一种先进先出(FIFO)的数据结构,这意味着最早添加的元素将首先被移除。就像一个队列,你只能从队列的一端添加元素,从另一端移除元素。
队列的实现
class Queue {
constructor() {
this.items = [];
}
enqueue(item) {
this.items.push(item);
}
dequeue() {
return this.items.shift();
}
peek() {
return this.items[0];
}
isEmpty() {
return this.items.length === 0;
}
}
队列的应用
- 任务调度: 队列可以用于任务调度。当一个新任务到达时,它被添加到队列中。当一个工作进程空闲时,它从队列中获取一个任务并开始执行。
- 消息传递: 队列可以用于消息传递。当一个进程需要向另一个进程发送消息时,它将消息放入队列中。当接收进程空闲时,它从队列中获取消息并处理它。
- 文件系统: 队列可以用于文件系统。当一个进程需要读写一个文件时,它将文件打开并将其放入队列中。当操作系统空闲时,它从队列中获取一个文件并对其进行读写操作。
总结
栈和队列都是基本的数据结构,它们在编程中有着广泛的应用。栈遵循先进后出(FILO)的原则,而队列遵循先进先出 (FIFO) 的原则。希望本文能帮助读者理解栈和队列的概念、实现方法以及在 JavaScript 中的应用。