这是我参与更文挑战的第11天,活动详情查看:更文挑战
什么是栈
栈是一种遵从后进先出(LIFO)原则的有序集合。先添加的或者待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈也被用在编程语言的编译器和内存中保存变量,方法调用等。
栈的创建
我们先创建一个类来表示栈。
function Stack () {
// 各种属性和方法的声明
}
使用数组来保存栈里的元素。
function Stack () {
let items = []
// 各种属性和方法的声明
}
然后,为栈声明一些方法:
- push(ele) 添加一个或几个新元素到栈顶。
- pop() 移除栈顶的元素,同时返回被移除的元素。
- peek() 返回栈顶的元素,不对栈做任何修改。
- isEmpty() 如果栈里没有任何元素就返回true,否则返回false。
- clear() 移除栈里的所有元素。
- size() 返回栈里的元素个数。类似于数组的length属性。
function Stack () {
let items = []
// 各种属性和方法的声明
this.push = function (ele) {
items.push(ele)
}
this.push = function () {
return items.pop()
}
this.peek = function () {
return items[items.length - 1]
}
this.isEmpty = function () {
return !items.length
}
this.clear = function () {
items = []
}
this.size = function () {
return items.length
}
// 辅助方法 print用于将栈里的元素输出在控制台
this.print = function () {
console.log(items.toString())
}
}
通过上述代码,我们已经简单的实现了一个栈类,那么接下来就是使用啦:
let stack = new Stack()
console.log(stack.isEmpty()) // true
stack.push(5)
stack.push(6)
console.log(stack.peek()) // 8
stack.push(8)
console.log(stack.size()) // 3
console.log(stack.isEmpty()) // false
stack.pop()
console.log(stack.size()) // 2
stack.print() // [5, 6]
在js中的应用
栈内存就是给代码的执行提供一个环境,也叫上下文,它的大小是固定的(存在栈内存溢出的情况);而堆内存是用来存储引用类型值的,比如对象、数组等,它的大小不固定。