栈(Stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表(LIFO)。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。
通俗去讲就是比如我们洗好的盘子,需要垒叠放置在一起,最后洗好的盘子,放在了最顶,最先洗好的放在了最底层,那么我们的计算机科学中的 栈也正是如此。最先进入栈的我们叫做 入栈 或者叫做 进栈、压栈, 先进入的在 栈底,最后进入的在 栈顶 。
同理我们拿盘子去用的时候也是拿的最后放进去的,也就是拿的是最后入栈存在于 栈顶 的,这无法和我们常见的数组一样,可以随意在数组中的任意位置放置拿取。
在我们JavaScript中常见的栈的操作
- push(element): 添加一个新元素到栈顶位置
- pop(): 移除栈顶的元素,同时返回被移除的元素
- peek(): 返回栈顶的元素,不对栈做任何修改( 这个方法不会移除栈顶的元素,仅仅返回它 )。
- isEmpty(): 如果栈里没有任何元素就返回true,否则返回false。
- size() : 返回栈里的元素个数。这个方法和数组的length属性很类似。
- toString():将栈结构的内容以字符形式返回
//封装栈类
function Stack(){
//栈中的属性
this.items = []
//栈的相关操作
// 1.将元素压入栈
Stack.prototype.push = function (element){
this.items.push(element)
}
// 2.从栈中取出元素
Stack.prototype.pop = function (){
return this.items.pop()
}
// 3.查看一下栈顶元素
Stack.prototype.peek = function (){
return this.items[this.items.length - 1]
}
// 4.判断栈是否为空
Stack.prototype.isEmpty = function(){
return this.items.length === 0
}
// 5.获取栈中元素的个数
Stack.prototype.size = function (){
return this.items.length
}
// 6.toString 方法
Stack.prototype.toString = function (){
let resultString = ''
for(let i = 0 ; i < this.items.length; i++){
resultString += this.items[i] + ' '
}
return resultString
}
}
let s = new Stack()
s.push(20)
s.push(10)
s.push(40)
s.push(70)
alert(s)
s.pop()
s.pop()
s.pop()
alert(s.peek())
alert(s.isEmpty())
alert(s.size())
alert(s.toString())