「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战」
栈
介绍
栈 相信很多人对 栈 这个数据结构并不陌生,是数据结构的基本知识,里面也有很多小的知识点,这里也简单总结一下。
栈 的示意图:
简介
栈 是 先进后出, 后进先出 的一种方式,例如生活中有很多的例子: 叠盘子,压羽毛球桶,进狭窄的电梯 等等,都是 先进后出 的应用。
栈 只能在栈顶 来进行 插入 或 删除 的操作。
栈 (Stack) 的操作方式有:
-
进栈(push)
将一个元素添加到栈顶
-
出栈(pop)
将栈顶元素移除
-
返回栈顶(peek)
返回栈顶的元素,但不移除
-
栈是否为空(isEmpty)
判断栈里是否为空
-
栈中元素数量(size)
返回 栈 里面元素的数量
-
清空(clear)
清空栈内所有的元素
代码
class Stack {
constructor() {
this.arr = [10, 2, 3, 4, 6]
}
push(element) {
this.arr.push(element)
}
pop() {
return this.arr.pop()
}
peek() {
return this.arr[this.arr.length - 1]
}
isEmpty() {
return this.arr.length == 0
}
size() {
return this.arr.length
}
clear() {
this.arr = []
}
}
const stack = new Stack()
stack.push(12)
console.log(stack.arr)
console.log(stack.pop())
console.log(stack.arr)
console.log(stack.peek())
console.log(stack.arr)
console.log(stack.isEmpty())
console.log(stack.arr)
console.log(stack.size())
console.log(stack.arr)
stack.clear()
console.log(stack.arr)
得到的结果为:
[ 10, 2, 3, 4, 6, 12 ]
12
[ 10, 2, 3, 4, 6 ]
6
[ 10, 2, 3, 4, 6 ]
false
[ 10, 2, 3, 4, 6 ]
5
[ 10, 2, 3, 4, 6 ]
[]
例子
经典的 栈 来解决的 例子
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入: s = "()"
输出: true
结果代码
class Stack {
constructor() {
this.arr = []
}
push(element) {
this.arr.push(element)
}
pop() {
return this.arr.pop()
}
peek() {
return this.arr[this.arr.length - 1]
}
isEmpty() {
return this.arr.length == 0
}
size() {
return this.arr.length
}
clear() {
this.arr = []
}
}
const isValid = (s) => {
const stack = new Stack()
let symbolStr
for (let i in s) {
// console.log(s[i])
switch (s[i]) {
case '(':
stack.push(s[i])
break
case '[':
stack.push(s[i])
break
case '{':
stack.push(s[i])
break
case ')':
symbolStr = stack.pop()
if (symbolStr !== '(') return false
break
case ']':
symbolStr = stack.pop()
if (symbolStr !== '[') return false
break
case '}':
symbolStr = stack.pop()
if (symbolStr !== '{') return false
break
}
}
// 循环完毕后,判断 stack 里面是否还有数据
return stack.size() === 0 ? true : false
}
总结
栈 是数据结构的基础,它的方式是 先进后出 。
且只能在 栈顶 进行 添加或删除操作。