栈
栈
栈:一种先入后出的数据结构
栈的操作
- push()方法 入栈
- pop()方法 出栈,可以访问栈顶元素,但同时栈顶元素彻底被删除。
- peek()方法 只返回栈顶元素,而不会删除它。
- clear()方法 清除栈内所有元素
- length()方法 记录栈内元素的个数
- empty属性,用于表示栈内是否含有元素
function stack(){
this.database = [];
this.top = 0;
this.push = function(ele){
this.database[this.top++] = ele;
}
this.pop = function(){
return this.database[--this.pos];
}
this.peek = function(){
return this.database[this.pos-1];
}
this.length = function(){
return this.top;
};
this.clear = function(){
this.pos = 0;
};
}
练习
// 1、判断一个算术表达式中的括号是否匹配
// 思路:遇到'(','{','['将其压入栈,遇到')','}',']'判断栈顶与其是否匹配
function check(exp){
var s = new stack();
var str = exp.split("");
for(var i = 0;i<str.length;i++){
if(['(','{','['].indexOf(str) > -1){
s.push(str);
} else if([')','}',']'].indexOf(str) > -1) {
var top = s.pop();
if((top == '(' && str == ')')||(top == '[' && str == ']')||(top == '{' && str == '}')){
continue;
} else {
return false;
}
}
}
if(s.length() > 0){
return false;
}
return true;
}
// 2、使用两个栈,一个用来存储操作数,一个用来存储操作符,设计并实现一个js函数,该函数可以将中缀表达式转换为后缀表达式,然后利用栈对该表达式求值。
// 运算符判断
function isOperator(value){
var operatorString = "+-*/()";
return operatorString.indexOf(value) > -1
}
// 3、佩兹糖果盒,不改变其他颜色糖果将黄色糖果移出
function candy(arr){
var results = [];
var candys = new stack();
var likes = new stack();
for(var i=0;i<arr.length;i++) {
if(arr[i] != 2) {
likes.push(arr[i]);
}
}
while(likes.length()>0){
candys.push(likes.pop());
}
while(candys.length()>0){
results.push(candys.pop());
}
return results;
}
第二题,通过翻阅资料明白栈在四则运算中的应用,但是怎么通过JavaScript实现还没有头绪。
参考资料:数据结构入门 第四章 栈与队列
大佬实现的算法:javascript中解析四则运算表达式的算法和示例