栈知识的应用

栈的特点:先进后出

常见问题:

数制间的相互转换

1.最高位为n%b将此压入栈中
2.使用n/b向下取整替换掉n
3.重复1和2,直到n=0,而且没有余数了
4重复将栈里面的元素弹出

function mulBase(num, base) {
  let s = [];
  do {
    s.push(num % base);
    num = Math.floor(num /= base);
  } while (num > 0);
  let converted = '';
  while (s.length > 0) {
    converted += s.pop();
  }
  return converted;
}

回文

什么是回文:比如dad,将字符翻转之后还是dad

function isPalindrome(word) {
  let s = [];
  for (let i = 0; i< word.length; i++) {
    s.push(word[i]);
  }
  let rword = '';
  while (s.length > 0) {
    rword += s.pop()
  }
  if (word === rword) {
    return true
  }
  return false
}

用栈可以判断括号是否匹配

2.3+23/12+(3.14159*0.24

function demo (str) {
  let sign = '(){}[]'
  let map = {
    '(': ')',
    '{': '}',
    '[': ']'
  }
  let s = []
  for (let i = 0; i < str.length; i++) {
    if (sign.includes(str[i])) {
      let val = str[i];
      switch (val) {
        case '(':
        case '[':
        case '{': s.push(val); break;
        case ')':
          let map1 = s.pop();
          if (map1 !== '(') {
            return `位置${i}的)不匹配`
          }
          break;
        case ']':
          let map2 = s.pop();
          if (map2 !== '[') {
            return `位置${i}的]不匹配`
          }
          break;
        case '}':
          let map3 = s.pop();
          if (map3 !== '{') {
            return `位置${i}的}不匹配`
          }
          break;
      }
    }
  }
  if (s.length) {
    return `符号${s.join()}没有闭合`
  } else {
    return '符号正确'
  }
}

总结:进栈使用push,出栈使用pop,我们使用的数组来模拟栈结构,所以只需要使用者两个方法,始终要牢记栈的特点的是先进后出。

发布了254 篇原创文章 · 获赞 200 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/wu_xianqiang/article/details/105023508
今日推荐