栈(stack)
- 它是一种运算受限的线性表;
- 遵循后进先出(LIFO);
- 新添加或者待删除的元素都保存在栈顶,另一端就叫做栈底;
- 在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈的方法
- push() 添加一个或多个元素到栈顶;
- pop() 删除栈顶的元素,并返回移除的元素;
- peek() 返回栈顶的元素
- isEmpty() 用于判断栈是否为空
- clear() 用于清空栈的元素
- size() 用于返回栈中元素的个数
栈的实现
利用JS实现一个基于数组的栈
class ArrayStack {
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;
}
// 移除栈里所有的元素
clear() {
this.items = [];
}
// 返回栈里的元素个数
size() {
return this.items.length;
}
}
利用JS实现一个基于对象的栈
class ObjectStack {
constructor() {
this.items = {};
this.count = 0;
}
// 添加元素
push(element) {
this.items[this.count] = element;
this.count++;
}
// 删除元素
pop() {
if (this.isEmpty()) {
return undefined;
}
this.count--;
const result = this.items[this.count];
delete this.items[this.count];
return result;
}
// 返回栈顶的元素
peek() {
if (this.isEmpty()) {
return undefined;
}
return this.items[this.count - 1];
}
// 判断栈里是否还有元素
isEmpty() {
return this.count === 0;
}
// 移除栈里的所有元素
clear() {
this.items = {};
this.count = 0;
}
// 返回栈里的元素个数
size() {
return this.count;
}
}