跳到主要内容

  • 栈是一种线性数据结构,用于存储一组有序的元素。
  • 栈的元素遵循 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;
};