js关于判断算式中括号匹配的问题

来源:互联网 发布:汤尼伯爵男装淘宝 编辑:程序博客网 时间:2024/05/21 22:51

学习前端有段时间了,一直没有学习过算法。在我的心中一直觉得没学习过算法的程序员不是一个合格的程序员。于是就翻看数据结构与算法这本书,看到栈的时候,提到一个有趣的
问题:如何验证一个算式中的括号否匹配。一开始很纠结,以为只要是括号成对出现,不论怎样排列都是要判断出来。例如:{(})这种括号,一直钻到这个牛角尖中出不来。
后来仔细一想是算式中,有哪个算式会有这么奇葩的括号组合。瞬间被自己的傻给折服啦。
JS中有自己的栈数据结构,因此不必自行设计一个栈机制出来,不过我还是想把如何用数组基本的数据结构实现栈给写出来:

function Stack(){    this.top=0;    this.dataStore=[];    this.push=push;    this.pop=pop;    this.length=length;    this.clear=clear;}function push(element){this.dataStore[this.top++]=element;}function pop(){return this.dataStore[--this.top];}function length(){return this.top;}function clear(){this.top=0;}

上面就通过数组实现了一个栈;下面就通过栈来实现算式括号匹配的算法

function  mate(equation){var s=new Stack();var transNum;for(var i=0;i<equation.length;i++){switch(equation[i]){case "(":s.push(equation[i]);break;case "[":s.push(equation[i]);break;case "{":s.push(equation[i]);break;case ")":transNum=s.pop();if(transNum!="(") return false;break;case "]":transNum=s.pop();if(transNum!="]") return false;break;case "}":transNum=s.pop();if(transNum!="}") return false;break; } }if(s.length()==0){return true;}else{return false;}}

以上算法就实现了算式括号匹配问题,写出来之后我又上网搜了其他人的一些算法。有使用正则
把算式中的所有括号都匹配出来再遍历的。其实核心都一样,都是利用栈机制。
遍历算式当碰到算式中的( , [ 或 {时,将其压入栈中,当遍历到) , ] 或 }时,将栈中已
有的元素弹出与之匹配,最后栈的长度为0说明括号全部匹配。以上内容是己拙见,有错误还请各
位大牛指出,谢谢!!!

0 0
原创粉丝点击