一、js栈(数组方式)
class Stack{
constructor(){
this.item = [];
}
push(element) {//添加栈元素
this.item.push(element);
}
pop(){//删除栈顶元素
return this.item.pop();
}
peek() {//返回栈顶元素
return this.item[this.item.length-1];
}
clear(){//清除栈中得所有元素
this.item = [];
}
isEmpty() {//判断栈是否为空
return this.item.length === 0;
}
size() {//返回栈长度
return this.item.length;
}
toString() {//转化成字符串
return this.item.toString();
}
}
二、js栈(对象方式)
class Stack {
constructor() {
this.count = 0;
this.item = {};
}
push(element) {//添加栈元素
this.item[this.count] = element;
this.count++;
}
pop(){//删除栈顶元素
if (this.isEmpty()) return undefined;
this.count--;
const result = this.item[this.count];
delete this.item[this.count];
return result;
}
peek() {//返回栈顶元素
if (this.isEmpty()) return undefined;
return this.item[this.count - 1];
}
clear(){//清除栈中得所有元素
this.count = 0;
this.item = {};
}
isEmpty() {//判断栈是否为空
return this.count === 0;
}
size() {//返回栈长度
return this.count;
}
toString() {//转化成字符串
if (this.isEmpty()) return '';
let objString = `${this.item[0]}`;
for (var i = 1; i < this.count; i++) {
objString = `${objString},${this.item[i]}`;
}
return objString;
}
}
三、测试,以上代码可直接在浏览器控制台运行
var aaa = new Stack();
aaa.push('ss')
aaa.push('ee')
aaa.push('rr')
console.log(aaa.toString())
console.log('栈顶元素:'+aaa.peek())
console.log('栈当前长度:'+aaa.size())
aaa.pop();
console.log(aaa.toString())
aaa.clear();
console.log(aaa.toString())
四、用途
1.问题
判断字符串中的{}、[]、()三种括号是否匹配
2.示例
输入:’()’ 输出:true
输入:’( ) [ ]{ }’ 输出:true
输入:’{ ]’ 输出:false
输入:’( [ ) ]’ 输出:false
输入:’’{ [ ] }’ 输出:true
3.思路
(1).遍历字符串的每一个字符
(2).如果是左括号直接push入栈
(3).如果是右括号,将栈顶的第一个元素取出来与当前的元素进行对比,如果不匹配,则return false,如果匹配,则出栈
(4).遍历完之后,栈为空则该字符串的括号匹配return true;否则不匹配return false