栈和队列是两种常见的数据结构,它们在元素的插入和删除方式上有所区别。
栈:
- 栈是一种后进先出(Last-In-First-Out,LIFO)的数据结构。
- 在栈中,元素只能从栈顶添加或删除。
- 添加元素称为压栈(push),删除元素称为弹栈(pop)。
- 最后被压入栈的元素将会第一个被弹出。
举个例子,你可以把栈想象成一叠盘子,最后放上去的盘子会最先被取走。
栈的实现(代码):
class Stack {
constructor() {
this.items = []; // 栈内元素存储数组
}
push(element) { // 入栈
this.items.push(element);
}
pop() { // 出栈
if (this.isEmpty()) return null;
return this.items.pop();
}
peek() { // 获取栈顶元素
if (this.isEmpty()) return null;
return this.items[this.items.length - 1];
}
isEmpty() { // 判断栈是否为空
return this.items.length === 0;
}
size() { // 获取栈内元素个数
return this.items.length;
}
clear() { // 清空栈
this.items = [];
}
}
如何使用:??
let stack = new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
console.log(stack.pop()); // 3
console.log(stack.peek()); // 2
console.log(stack.isEmpty()); // false
console.log(stack.size()); // 2
stack.clear();
console.log(stack.isEmpty()); // true
?
队列:
- 队列是一种先进先出(First-In-First-Out,FIFO)的数据结构。
- 在队列中,元素只能从队尾添加,从队首删除。
- 添加元素称为入队(enqueue),删除元素称为出队(dequeue)。
- 最先入队的元素将会最先出队。
以排队买票为例,队列就像是人们排队等候的队伍,第一个来的人会第一个买到票。
队列的实现
class Queue {
constructor() {
this.items = []; // 队列内元素存储数组
}
enqueue(element) { // 入队
this.items.push(element);
}
dequeue() { // 出队
if (this.isEmpty()) return null;
return this.items.shift();
}
front() { // 获取队首元素
if (this.isEmpty()) return null;
return this.items[0];
}
isEmpty() { // 判断队列是否为空
return this.items.length === 0;
}
size() { // 获取队列内元素个数
return this.items.length;
}
clear() { // 清空队列
this.items = [];
}
}
使用示例:
let queue = new Queue();
queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
console.log(queue.dequeue()); // 1
console.log(queue.front()); // 2
console.log(queue.isEmpty()); // false
console.log(queue.size()); // 2
queue.clear();
console.log(queue.isEmpty()); // true
????????总结: 栈和队列都是常用的数据结构,但它们在操作顺序和特性上有所不同。栈适用于需要后进先出操作的场景,而队列适用于需要先进先出操作的场景。具体使用哪种数据结构取决于具体的问题和需求。