一、栈
栈是一种十分常见的数据结构,可以解决的问题有很多,比如括号匹配、表达式求值、递归等,用简单的话描述他的特点就是:先进后出,后进先出。
实现
class Stack {
constructor() {
// 基于数组实现的顺序栈
this._Stack = [];
}
Push(item) {
this._Stack.push(item);
}
Pop() {
return !this.isEmpty() ? this._Stack.pop() : null;
}
peek() {
return !this.isEmpty() ? this._Stack[this._Stack.length - 1] : null;
}
Size() {
return this._Stack.length;
}
Clear() {
return this._Stack.length = 0;
}
isEmpty() {
return this.Size() === 0;
}
}
let stack = new Stack();
for(let i = 0; i < 6; i++) {
stack.Push(i);
}
console.log(stack.peek()); // 5
console.log(stack.Pop()); // 5
console.log(stack.Pop()); // 4
console.log(stack.Pop()); // 3
console.log(stack.Pop()); // 2
console.log(stack.Pop()); // 1
console.log(stack.Pop()); // 0
console.log(stack.Pop()); // null
二、队列
队列和栈十分相似,他的特点也同样可以用一句话概括:先进先出,后进后出。在js典型的应用就是事件队列。
实现
class Queue {
constructor() {
// 基于数组实现的顺序栈
this._Queue = [];
}
Enqueue(item) {
this._Queue.push(item);
}
Dequeue() {
return !this.isEmpty() ? this._Queue.shift() : null;
}
QueueFront() {
return !this.isEmpty() ? this._Queue[this._Queue.length - 1] : null;
}
Size() {
return this._Queue.length;
}
Clear() {
return this._Queue.length = 0;
}
isEmpty() {
return this.Size() === 0;
}
}
let queue = new Queue();
for(let i = 0; i < 6; i++) {
queue.Enqueue(i);
}
console.log(queue.QueueFront()); // 5
console.log(queue.Dequeue()); // 0
console.log(queue.Dequeue()); // 1
console.log(queue.Dequeue()); // 2
console.log(queue.Dequeue()); // 3
console.log(queue.Dequeue()); // 4
console.log(queue.Dequeue()); // 5
console.log(queue.Dequeue()); // null