什么是栈
栈(stack)是一种运算受限的线性表:
LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间。类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用。
其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;
从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
JavaScript 代码实现栈结构
// push() 添加一个新元素到栈顶位置。
// pop() 移除栈顶的元素,同时返回被移除的元素。
// peek() 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
// isEmpty() 如果栈里没有任何元素就返回 true,否则返回 false。
// size() 返回栈里的元素个数。这个方法和数组的 length 属性类似。
// toString() 将栈结构的内容以字符串的形式返回。
// 初始化栈类
class Stack {
constructor(){
this.items = []
}
// push() 添加一个新元素到栈顶位置。
push(item){
this.items.push(item)
}
// pop() 移除栈顶的元素,同时返回被移除的元素。
pop(item){
this.items.pop(item)
}
// peek() 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
peek(){
return this.items[this.items.length - 1 ]
}
// isEmpty() 如果栈里没有任何元素就返回 true,否则返回 false。
isEmpty(){
return this.items.length === 0
}
// size() 返回栈里的元素个数。这个方法和数组的 length 属性类似。
size(){
return this.items.length
}
// toString() 将栈结构的内容以字符串的形式返回。
toString(){
let itemStr = ''
this.items.forEach(item => {
itemStr += item + ''
});
return itemStr
}
}
const stack = new Stack()
stack.push(1);
console.log("栈的初始化:", stack);
console.log("================");
stack.push(2);
console.log("栈的初始化:", stack);
console.log("================");
stack.push(3)
console.log("栈的初始化:", stack);
console.log("================");
let strStack = stack.toString()
console.log(strStack);