栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
1:es5(function)实现
// 栈 先进后出
function Stack(items = []) {
this.items = items;
// 压栈
Stack.prototype.enStack = (item) => {
this.items.push(item);
};
// 出栈
Stack.prototype.outStack = () => {
return this.items.pop();
};
// 是否为空
Stack.prototype.isEmpty = () => {
return this.items.length === 0;
};
// 清空栈
Stack.prototype.clear = () => {
this.items = [];
};
// 返回栈顶元素
Stack.prototype.peek = () => {
return this.items[this.length - 1];
};
// 栈的大小
Stack.prototype.getSize = () => {
return this.items.length;
};
// toString方法
Stack.prototype.toString = () => {
let str = '';
for (let i of this.items) {
str += i + ' ';
}
return str;
};
Stack.prototype.print = () => {
console.log(this.items.toString());
};
}
const newStack = new Stack([1, 2, 3, 4]);
2:es6(class)实现
// 栈 先进后出
class Stack {
constructor(items = []) {
this.items = items;
}
// 压栈
enStack(item) {
this.items.push(item);
}
// 出栈
outStack() {
return this.items.pop();
}
// 是否为空
isEmpty() {
return this.items.length === 0;
}
// 清空栈
clear() {
this.items = [];
}
// 返回栈顶元素
peek() {
return this.items[this.length - 1];
}
// 栈的大小
get getSize() {
return this.items.length;
}
// toString方法
toString() {
let str = '';
for (let i of this.items) {
str += i + ' ';
}
return str;
}
print() {
console.log(this.items.toString());
}
}
const newStack = new Stack([1, 2, 3]);
newStack.clear();
console.log(newStack.peek());