美文网首页
Javascript-数据结构与算法之栈

Javascript-数据结构与算法之栈

作者: Draven_cxy | 来源:发表于2020-12-09 13:21 被阅读0次

网络上关于栈的说明相比大家已经看过很多了,接下来我用这张图来简单的表示一下什么是

栈.gif
它的数据结构为后进先出(Last Input First Output - LIFO)先入栈的元素会被放到栈底,出栈的话从栈顶先出。举个生活的例子:子弹夹(最先被压入的子弹总是最后才被发射出去)

接下来我们整理一下这个数据结构有哪些方法
1.入栈 push
2.出栈 pop
3.查看栈顶元素 top
4.查看栈的大小 getSize
5.查看栈是否为空 isEmpty
6.清除栈 clean
接下来我们用代码来实现一个栈

function Stack() {
  let data = [];
  this.push = function(item) {
    data.push(item)
  }
  this.pop = function() {
    if(this.isEmpty()) {
      return false;
    } else {
      return data.pop();
    }
  }
  this.top = function() {
    return data[data.length];
  }
  this.getSize = function() {
    return data.length;
  }
  this.isEmpty = function() {
    return data.length === 0;
  }
  this.clean = function() {
    data = [];
  }
}

看到这里不知道大家会不会有疑惑。栈里面的方法数组里面都有,那我为什么不直接用数组去解决?而要用栈呢?
那接下来我给大家出到题目
判断字符串括号的合法性
((123)(aaa(cc)ddd)()) - 合法
(()123(aa))(c)(c))( - 不合法
解题思路:先循环字符串,找到"("将其压入栈中去,找到")"判断栈内是否为空,不为空的话使用pop()方法出栈,如果栈内为空则程序不合法。如果遍历完成栈内还有元素的话说明不合法。

接下来就是栈的实战演练代码

function legal(items) {
  let stack = new Stack();
  for(let i=0; i<items.length; i++) {
    let item = items[i];
    if(item === '(') {
      stack.push(item);
    } else if(item === ')') {
      if(stack.isEmpty()) return false;
      else stack.pop();
    }
  }
  return stack.isEmpty();
}
console.log(legal('((123)(aaa(cc)ddd)())'))    // result = true
console.log(legal('(()123(aa))(c)(c))('))      // result = false

好了,今天的分享就到这里了。有说明问题的话小伙伴们可以给我留言。(第一次写简书写的不是很好,大家请见谅~~)

相关文章

网友评论

      本文标题:Javascript-数据结构与算法之栈

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