返回
javascript版数据结构之栈(附:leetCode 20)
前端
2023-12-10 02:05:42
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使栈顶元素变为其下一个元素。栈是一种后进先出的(LIFO)数据结构,即遵循“后进先出”的原则。
栈的特点
栈有以下特点:
- 栈是一种先进后出(LIFO)的数据结构,即后进先出,后加入的元素先被删除。
- 栈只允许在栈顶进行插入和删除操作。
- 栈是一种线性数据结构,它只支持一个方向上的插入和删除操作。
- 栈是一种动态数据结构,它可以根据需要自动调整大小。
栈的应用
栈在计算机科学中有着广泛的应用,例如:
- 编译器:栈用于存储中间代码和符号表。
- 操作系统:栈用于存储函数调用信息和局部变量。
- 虚拟机:栈用于存储指令和数据。
- 浏览器:栈用于存储历史记录和书签。
- 图形用户界面:栈用于存储窗口状态和菜单信息。
javascript版栈的实现
在javascript中,可以使用数组来实现栈。数组是一种有序的数据结构,它允许随机访问元素。我们可以使用数组的push()方法来实现进栈操作,使用数组的pop()方法来实现出栈操作。
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
}
leetCode 20示例
下面是使用javascript实现的leetcode 20示例:
/*
* Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.
An input string is valid if:
* Open brackets must be closed by the same type of brackets.
* Open brackets must be closed in the correct order.
Example 1:
Input: "()"
Output: true
Example 2:
Input: "()[]{}"
Output: true
Example 3:
Input: "(]"
Output: false
Example 4:
Input: "([)]"
Output: false
Example 5:
Input: "{[]}"
Output: true
*/
const isValid = (s) => {
const stack = [];
const brackets = {
')': '(',
'}': '{',
']': '['
};
for (let i = 0; i < s.length; i++) {
const char = s[i];
if (brackets[char]) {
const top = stack[stack.length - 1];
if (top === brackets[char]) {
stack.pop();
} else {
return false;
}
} else {
stack.push(char);
}
}
return stack.length === 0;
};
总结
栈是一种非常重要的数据结构,它在计算机科学中有着广泛的应用。javascript中的栈可以使用数组来实现。使用数组的push()方法来实现进栈操作,使用数组的pop()方法来实现出栈操作。