1. 栈的定义
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
2. 上代码
function Stack() {
var items = []; // 使⽤数组存储数据
// push⽅法向栈⾥压⼊⼀个元素
this.push = function(item){
items.push(item);
};
// pop⽅法把栈顶的元素弹出
this.pop = function(){
return items.pop();
};
// top ⽅法返回栈顶元素
this.top = function(){
return items[items.length - 1];
};
// isEmpty返回栈是否为空
this.isEmpty = function(){
return items.length == 0;
};
// size⽅法返回栈的⼤⼩
this.size = function(){
return items.length;
};
// clear 清空栈
this.clear = function(){
items = []
}
}
3 练习题 盗用习题
注: 练习题自找哈
- 下方字符串中包含小括号,请编写一个函数判断字符串中的括号是否合法,所谓合法就是小括号成对出现
sdf(ds(ew(we)rw)rwqq)qwewe 合法
(sd(qwqw)sd(sd)) 合法
()()sd()(sd()fw))( 不合法
解题代码:
function is_leagl_brackets(string){
var stack = new Stack();
for(var i=0;i<string.length;i++ ){
var item = string[i];
if(item == "("){
// 将左括号压⼊栈
stack.push(item);
}else if (item==")"){
// 如果为空,就说明没有左括号与之抵消
if(stack.isEmpty()){
return false;
}else{
// 将栈顶的元素弹出
stack.pop();
}
}
}
return stack.size() == 0;
};
console.log(is_leagl_brackets("()()))"));
console.log(is_leagl_brackets("sdf(ds(ew(we)rw)rwqq)qwewe"));
console.log(is_leagl_brackets("()()sd()(sd()fw))("));