栈
- 栈是一种线性数据结构,用于存储一组有序的元素。
- 栈的元素遵循 LIFO(后进先出)的原则,即最后进入的元素最先出栈。
- 栈有两个基本操作:push(入栈)和 pop(出栈)。
- 栈还有一个常用的操作:peek(查看栈顶元素)。
栈的实现
function Stack() {
this.items = [];
// 1.入栈
Stack.prototype.push = function (element) {
return 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 () {
// 返回格式如: 10 20 30 等
let resString = this.items.join(" ");
return resString;
};
}
常用算法:有效括号
const isValid = (str) => {
// 不是成对的之后返回 false
if (str.length % 2 === 1) return false;
// 创建栈 存储
let stack = [];
let length = str.length;
let map = new Map();
map.set("(", ")");
map.set("{", "}");
map.set("[", "]");
for (let i = 0; i < length; i++) {
let currentStr = str[i];
if (map.has(currentStr)) {
// 入栈
stack.push(currentStr);
} else {
// 栈最顶层
let stackTop = stack[stack.length - 1];
if (map.get(stackTop) === currentStr) {
// 如果相等则表示成对,出栈
stack.pop();
} else {
return false;
}
}
}
return stack.length === 0;
};