美文网首页程序员
笔试算法须知---用JS实现栈处理问题

笔试算法须知---用JS实现栈处理问题

作者: edisonchan | 来源:发表于2017-09-24 01:01 被阅读0次

    使用js实现stack

    栈的性质:先进后出,只能在栈顶插入和删除

    这就是一个栈
    function Stack() {
          this.stackData = []; //保存栈内元素,初始化为一个空数组;
          this.top = 0;//栈顶位置,初始为0;
          this.push = push;//入栈
          this.pop = pop;//出栈
          this.peek = peek;//查看栈顶元素
          this.clear = clear;//清空栈
          this.length = length;//栈内存放的元素个数
    }
    function push(element){
          this.stackData[this.top++] = element;
    }
    function pop(){
          return this.stackData[--this.top];
    }
    function length(){
          return this.top;
    }
    function peek(){
          return this.stackData[this.top-1];
    }
    function clear(){
          this.top = 0;
    }
    

    /*测试stack的实现 */

    var s = new Stack();
    s.push("aa");
    s.push("bb");
    s.push("cc");
    console.log(s.length());//3
    console.log(s.peek());//cc
    var popped = s.pop();
    console.log(popped);//cc
    console.log(s.peek());//bb
    

    之前有道某雷的前端笔试题就是需要用到js实现栈来处理问题
    题目大概就是:给你一个括号字符串,字符串中含有()[]{},然后判断该字符串中的括号是否合法匹配。

    样例输入:
    ( [ { ] } )
    输出:不合法
    样例输入:
    ( [ ] { ( ) } )
    输出:合法

    function MatchBracket(BracketString){//函数名:匹配括号,参数:括号字符串
    var s = new Stack();
    var bs = Array.from(BracketString);
    for(var i=0;i<bs.length-1;i++){
      switch(bs[i]){
          case '{':
          case '[':
          case '(':
              s.push(bs[i]);//凡是左括号通通入栈
              break;
          case ')':
          case ']':
          case '}':
              var topEle = s.pop();
              if((topEle=="(" && bs[i]==")") || (topEle=="[" && bs[i]=="]") || (topEle=="{" && bs[i]=="}")){
                 break;
                 //判断左括号与右括号是否能匹配上
              }else{
                console.log("不合法");
                return;
              }
      }
    }
          if(s.top==0){
              return "合法";
          }else{
              return "不合法";
          }
    }
    

    完整代码见Github:

    https://github.com/edisonchan97/JS-algorithm/blob/master/%E5%8C%B9%E9%85%8D%E6%8B%AC%E5%8F%B7%E4%BB%A3%E7%A0%81

    相关文章

      网友评论

        本文标题:笔试算法须知---用JS实现栈处理问题

        本文链接:https://www.haomeiwen.com/subject/szoxextx.html