数据结构与算法JavaScript描述——栈 4.4 练习

栈:一种先入后出的数据结构

栈的操作

  1. push()方法   入栈
  2. pop()方法    出栈,可以访问栈顶元素,但同时栈顶元素彻底被删除。
  3. peek()方法  只返回栈顶元素,而不会删除它。
  4. clear()方法    清除栈内所有元素
  5. length()方法    记录栈内元素的个数
  6. 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中解析四则运算表达式的算法和示例

猜你喜欢

转载自blog.csdn.net/u011435776/article/details/81543797
4.4
今日推荐